games.scm 249 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117
  1. ;;; GNU Guix --- Functional package management for GNU
  2. ;;; Copyright © 2013 John Darrington <jmd@gnu.org>
  3. ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
  4. ;;; Copyright © 2014, 2016 David Thompson <dthompson2@worcester.edu>
  5. ;;; Copyright © 2014, 2015, 2016, 2017, 2018 Eric Bavier <bavier@member.fsf.org>
  6. ;;; Copyright © 2014 Cyrill Schenkel <cyrill.schenkel@gmail.com>
  7. ;;; Copyright © 2014 Sylvain Beucler <beuc@beuc.net>
  8. ;;; Copyright © 2014, 2015, 2018 Ludovic Courtès <ludo@gnu.org>
  9. ;;; Copyright © 2014, 2015, 2016 Sou Bunnbu <iyzsong@gmail.com>
  10. ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
  11. ;;; Copyright © 2015, 2016 Andreas Enge <andreas@enge.fr>
  12. ;;; Copyright © 2015 David Hashe <david.hashe@dhashe.com>
  13. ;;; Copyright © 2015, 2017, 2018 Christopher Lemmer Webber <cwebber@dustycloud.org>
  14. ;;; Copyright © 2015, 2016, 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
  15. ;;; Copyright © 2015, 2016, 2017 Alex Kost <alezost@gmail.com>
  16. ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
  17. ;;; Copyright © 2016, 2017 Rodger Fox <thylakoid@openmailbox.org>
  18. ;;; Copyright © 2016, 2017, 2018 Nils Gillmann <ng0@n0.is>
  19. ;;; Copyright © 2016 Albin Söderqvist <albin@fripost.org>
  20. ;;; Copyright © 2016, 2017, 2018 Kei Kebreau <kkebreau@posteo.net>
  21. ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
  22. ;;; Copyright © 2016, 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
  23. ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
  24. ;;; Copyright © 2016 Steve Webber <webber.sl@gmail.com>
  25. ;;; Copyright © 2017 Adonay "adfeno" Felipe Nogueira <https://libreplanet.org/wiki/User:Adfeno> <adfeno@hyperbola.info>
  26. ;;; Copyright © 2017, 2018 Arun Isaac <arunisaac@systemreboot.net>
  27. ;;; Copyright © 2017, 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
  28. ;;; Copyright © 2017 nee <nee-git@hidamari.blue>
  29. ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
  30. ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
  31. ;;; Copyright © 2017, 2018 Rutger Helling <rhelling@mykolab.com>
  32. ;;; Copyright © 2017 Roel Janssen <roel@gnu.org>
  33. ;;; Copyright © 2017, 2018 Nicolas Goaziou <mail@nicolasgoaziou.fr>
  34. ;;; Copyright © 2018 okapi <okapi@firemail.cc>
  35. ;;; Copyright © 2018 Tim Gesthuizen <tim.gesthuizen@yahoo.de>
  36. ;;; Copyright © 2018 Madalin Ionel-Patrascu <madalinionel.patrascu@mdc-berlin.de>
  37. ;;; Copyright © 2018 Benjamin Slade <slade@jnanam.net>
  38. ;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
  39. ;;;
  40. ;;; This file is part of GNU Guix.
  41. ;;;
  42. ;;; GNU Guix is free software; you can redistribute it and/or modify it
  43. ;;; under the terms of the GNU General Public License as published by
  44. ;;; the Free Software Foundation; either version 3 of the License, or (at
  45. ;;; your option) any later version.
  46. ;;;
  47. ;;; GNU Guix is distributed in the hope that it will be useful, but
  48. ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
  49. ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  50. ;;; GNU General Public License for more details.
  51. ;;;
  52. ;;; You should have received a copy of the GNU General Public License
  53. ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
  54. (define-module (gnu packages games)
  55. #:use-module (ice-9 match)
  56. #:use-module ((guix licenses) #:prefix license:)
  57. #:use-module (guix utils)
  58. #:use-module (guix packages)
  59. #:use-module (guix download)
  60. #:use-module (guix git-download)
  61. #:use-module (guix svn-download)
  62. #:use-module (guix gexp)
  63. #:use-module (gnu packages)
  64. #:use-module (gnu packages algebra)
  65. #:use-module (gnu packages autotools)
  66. #:use-module (gnu packages backup)
  67. #:use-module (gnu packages base)
  68. #:use-module (gnu packages build-tools)
  69. #:use-module (gnu packages admin)
  70. #:use-module (gnu packages audio)
  71. #:use-module (gnu packages avahi)
  72. #:use-module (gnu packages assembly)
  73. #:use-module (gnu packages bash)
  74. #:use-module (gnu packages bison)
  75. #:use-module (gnu packages boost)
  76. #:use-module (gnu packages check)
  77. #:use-module (gnu packages cmake)
  78. #:use-module (gnu packages compression)
  79. #:use-module (gnu packages curl)
  80. #:use-module (gnu packages crypto)
  81. #:use-module (gnu packages cyrus-sasl)
  82. #:use-module (gnu packages documentation)
  83. #:use-module (gnu packages docbook)
  84. #:use-module (gnu packages flex)
  85. #:use-module (gnu packages fltk)
  86. #:use-module (gnu packages fonts)
  87. #:use-module (gnu packages fontutils)
  88. #:use-module (gnu packages freedesktop)
  89. #:use-module (gnu packages fribidi)
  90. #:use-module (gnu packages game-development)
  91. #:use-module (gnu packages gcc)
  92. #:use-module (gnu packages gettext)
  93. #:use-module (gnu packages ghostscript)
  94. #:use-module (gnu packages gimp)
  95. #:use-module (gnu packages gl)
  96. #:use-module (gnu packages glib)
  97. #:use-module (gnu packages gnome)
  98. #:use-module (gnu packages gnuzilla)
  99. #:use-module (gnu packages gperf)
  100. #:use-module (gnu packages graphics)
  101. #:use-module (gnu packages gstreamer)
  102. #:use-module (gnu packages gtk)
  103. #:use-module (gnu packages guile)
  104. #:use-module (gnu packages icu4c)
  105. #:use-module (gnu packages image)
  106. #:use-module (gnu packages imagemagick)
  107. #:use-module (gnu packages less)
  108. #:use-module (gnu packages libcanberra)
  109. #:use-module (gnu packages libedit)
  110. #:use-module (gnu packages libunwind)
  111. #:use-module (gnu packages linux)
  112. #:use-module (gnu packages lua)
  113. #:use-module (gnu packages haskell)
  114. #:use-module (gnu packages man)
  115. #:use-module (gnu packages maths)
  116. #:use-module (gnu packages mp3)
  117. #:use-module (gnu packages music)
  118. #:use-module (gnu packages multiprecision)
  119. #:use-module (gnu packages ncurses)
  120. #:use-module (gnu packages netpbm)
  121. #:use-module (gnu packages networking)
  122. #:use-module (gnu packages ocaml)
  123. #:use-module (gnu packages pcre)
  124. #:use-module (gnu packages perl)
  125. #:use-module (gnu packages perl-check)
  126. #:use-module (gnu packages pkg-config)
  127. #:use-module (gnu packages pulseaudio)
  128. #:use-module (gnu packages python)
  129. #:use-module (gnu packages python-xyz)
  130. #:use-module (gnu packages qt)
  131. #:use-module (gnu packages readline)
  132. #:use-module (gnu packages shells)
  133. #:use-module (gnu packages sdl)
  134. #:use-module (gnu packages serialization)
  135. #:use-module (gnu packages sqlite)
  136. #:use-module (gnu packages swig)
  137. #:use-module (gnu packages tcl)
  138. #:use-module (gnu packages texinfo)
  139. #:use-module (gnu packages textutils)
  140. #:use-module (gnu packages tls)
  141. #:use-module (gnu packages upnp)
  142. #:use-module (gnu packages video)
  143. #:use-module (gnu packages vulkan)
  144. #:use-module (gnu packages web)
  145. #:use-module (gnu packages wxwidgets)
  146. #:use-module (gnu packages xdisorg)
  147. #:use-module (gnu packages xorg)
  148. #:use-module (gnu packages xiph)
  149. #:use-module (gnu packages xml)
  150. #:use-module (gnu packages messaging)
  151. #:use-module (gnu packages networking)
  152. #:use-module (guix build-system glib-or-gtk)
  153. #:use-module (guix build-system gnu)
  154. #:use-module (guix build-system go)
  155. #:use-module (guix build-system haskell)
  156. #:use-module (guix build-system meson)
  157. #:use-module (guix build-system scons)
  158. #:use-module (guix build-system python)
  159. #:use-module (guix build-system cmake)
  160. #:use-module (guix build-system trivial)
  161. #:use-module ((srfi srfi-1) #:hide (zip))
  162. #:use-module (srfi srfi-26))
  163. (define-public armagetronad
  164. (package
  165. (name "armagetronad")
  166. (version "0.2.8.3.4")
  167. (source (origin
  168. (method url-fetch)
  169. (uri (string-append "mirror://sourceforge/" name "/stable/"
  170. version "/" name "-" version ".src.tar.gz"))
  171. (sha256
  172. (base32
  173. "1pgy0r80z702qdv94aw3ywdn4ynnr4cdi86ml558pljfc5ygasj4"))))
  174. (build-system gnu-build-system)
  175. (inputs
  176. `(("libxml2" ,libxml2)
  177. ("sdl" ,sdl)
  178. ("sdl-image" ,sdl-image)
  179. ("freeglut" ,freeglut)
  180. ("libpng" ,libpng)
  181. ("libjpeg-turbo" ,libjpeg-turbo)))
  182. (home-page "http://www.armagetronad.org")
  183. (synopsis "Tron clone in 3D")
  184. (description "Armagetron is a multiplayer game in 3d that attempts to
  185. emulate and expand on the lightcycle sequence from the movie Tron. It's
  186. an old school arcade game slung into the 21st century. Highlights include
  187. a customizable playing arena, HUD, unique graphics, and AI bots. For the
  188. more advanced player there are new game modes and a wide variety of physics
  189. settings to tweak as well.")
  190. (license license:gpl2+)))
  191. (define-public bastet
  192. (package
  193. (name "bastet")
  194. (version "0.43.2")
  195. (source
  196. (origin
  197. (method git-fetch)
  198. (uri (git-reference
  199. (url "https://github.com/fph/bastet.git")
  200. (commit version)))
  201. (file-name (git-file-name name version))
  202. (sha256
  203. (base32 "09kamxapm9jw9przpsgjfg33n9k94bccv65w95dakj0br33a75wn"))
  204. (patches
  205. (search-patches "bastet-change-source-of-unordered_set.patch"))))
  206. (build-system gnu-build-system)
  207. (arguments
  208. `(#:make-flags
  209. (list (string-append "CXXFLAGS=-I"
  210. (assoc-ref %build-inputs "boost") "/include"))
  211. #:phases
  212. (modify-phases %standard-phases
  213. (delete 'configure) ; no configure script
  214. (replace 'check
  215. ;; The 'Test' target builds the tests, but doesn't actually run them.
  216. (lambda* (#:key make-flags #:allow-other-keys)
  217. (apply invoke "make" "Test" make-flags)
  218. (setenv "HOME" ".")
  219. (invoke "./Test")))
  220. (replace 'install
  221. (lambda* (#:key outputs #:allow-other-keys)
  222. (let* ((out (assoc-ref outputs "out"))
  223. (share (string-append out "/share"))
  224. (hicolor (string-append share "/icons/hicolor")))
  225. (install-file "bastet"
  226. (string-append out "/bin"))
  227. (install-file "bastet.desktop"
  228. (string-append share "/applications"))
  229. (install-file "bastet.svg"
  230. (string-append hicolor "/scalable/apps"))
  231. (install-file "bastet.appdata.xml"
  232. (string-append share "/appdata"))
  233. (install-file "bastet.6"
  234. (string-append out "/share/man/man6"))
  235. #t))))))
  236. (native-inputs
  237. `(("hicolor-icon-theme" ,hicolor-icon-theme)))
  238. (inputs
  239. `(("boost" ,boost)
  240. ("ncurses" ,ncurses)))
  241. (home-page "http://fph.altervista.org/prog/bastet.html")
  242. (synopsis "Antagonistic Tetris-style falling brick game for text terminals")
  243. (description
  244. "Bastet (short for Bastard Tetris) is a simple ncurses-based falling brick
  245. game. Unlike normal Tetris, Bastet does not choose the next brick at random.
  246. Instead, it uses a special algorithm to choose the worst brick possible.
  247. Playing bastet can be a painful experience, especially if you usually make
  248. canyons and wait for the long I-shaped block to clear four rows at a time.")
  249. (license license:gpl3+)))
  250. (define-public cataclysm-dda
  251. (let ((commit "0b2c194e5c6a06f4fbf14a0ec1260e0f3cf2567c")
  252. (revision "2"))
  253. (package
  254. (name "cataclysm-dda")
  255. ;; This denotes the version released after the 0.C release.
  256. ;; Revert to a normal version number if updating to stable version 0.D.
  257. (version (git-version "0.C" revision commit))
  258. (source (origin
  259. (method git-fetch)
  260. (uri (git-reference
  261. (url "https://github.com/CleverRaven/Cataclysm-DDA.git")
  262. (commit commit)))
  263. (sha256
  264. (base32
  265. "1yzsn0y2g27bvbxjvivjyjhkmf2w5na1qqw5qfkswcfqqwym2y33"))
  266. (file-name (git-file-name name version))))
  267. (build-system gnu-build-system)
  268. (arguments
  269. '(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
  270. "USE_HOME_DIR=1" "DYNAMIC_LINKING=1" "RELEASE=1"
  271. "LOCALIZE=1" "LANGUAGES=all")
  272. #:phases
  273. (modify-phases %standard-phases
  274. (delete 'configure)
  275. (add-after 'build 'build-tiles
  276. (lambda* (#:key make-flags outputs #:allow-other-keys)
  277. ;; Change prefix directory and enable tile graphics and sound.
  278. (apply invoke "make" "TILES=1" "SOUND=1"
  279. (string-append "PREFIX="
  280. (assoc-ref outputs "tiles"))
  281. (cdr make-flags))))
  282. (add-after 'install 'install-tiles
  283. (lambda* (#:key make-flags outputs #:allow-other-keys)
  284. (apply invoke "make" "install" "TILES=1" "SOUND=1"
  285. (string-append "PREFIX="
  286. (assoc-ref outputs "tiles"))
  287. (cdr make-flags)))))
  288. ;; TODO: Add libtap++ from https://github.com/cbab/libtappp as a native
  289. ;; input in order to support tests.
  290. #:tests? #f))
  291. (outputs '("out"
  292. "tiles")) ; For tile graphics and sound support.
  293. (native-inputs
  294. `(("gettext" ,gettext-minimal)
  295. ("pkg-config" ,pkg-config)))
  296. (inputs
  297. `(("freetype" ,freetype)
  298. ("libogg" ,libogg)
  299. ("libvorbis" ,libvorbis)
  300. ("ncurses" ,ncurses)
  301. ("sdl2" ,sdl2)
  302. ("sdl2-image" ,sdl2-image)
  303. ("sdl2-ttf" ,sdl2-ttf)
  304. ("sdl2-mixer" ,sdl2-mixer)))
  305. (home-page "http://en.cataclysmdda.com/")
  306. (synopsis "Survival horror roguelike video game")
  307. (description
  308. "Cataclysm: Dark Days Ahead is a roguelike set in a post-apocalyptic
  309. world. Struggle to survive in a harsh, persistent, procedurally generated
  310. world. Scavenge the remnants of a dead civilization for food, equipment, or,
  311. if you are lucky, a vehicle with a full tank of gas to get you out of Dodge.
  312. Fight to defeat or escape from a wide variety of powerful monstrosities, from
  313. zombies to giant insects to killer robots and things far stranger and deadlier,
  314. and against the others like yourself, that want what you have.")
  315. (license license:cc-by-sa3.0))))
  316. (define-public cowsay
  317. (package
  318. (name "cowsay")
  319. (version "3.04")
  320. (source (origin
  321. (method url-fetch)
  322. (uri (string-append "https://github.com/tnalpgge/"
  323. "rank-amateur-cowsay/archive/"
  324. name "-" version ".tar.gz"))
  325. (sha256
  326. (base32
  327. "12w7apbf6a9qffk92r32b16w22na2fjcqbl32rn0n7zw5hrp3f6q"))))
  328. (build-system gnu-build-system)
  329. (arguments
  330. `(#:phases
  331. (modify-phases %standard-phases
  332. (delete 'configure) ; no configure script
  333. (delete 'build) ; nothing to be built
  334. (replace 'install
  335. (lambda* (#:key outputs #:allow-other-keys)
  336. (invoke "sh" "install.sh"
  337. (assoc-ref outputs "out"))))
  338. (delete 'check)
  339. (add-after 'install 'check
  340. (lambda* (#:key outputs #:allow-other-keys)
  341. (invoke (string-append (assoc-ref outputs "out")
  342. "/bin/cowsay")
  343. "We're done!"))))))
  344. (inputs
  345. `(("perl" ,perl)))
  346. (home-page (string-append "https://web.archive.org/web/20071026043648/"
  347. "http://www.nog.net:80/~tony/warez/cowsay.shtml"))
  348. (synopsis "Speaking cow text filter")
  349. (description "Cowsay is basically a text filter. Send some text into it,
  350. and you get a cow saying your text. If you think a talking cow isn't enough,
  351. cows can think too: all you have to do is run @command{cowthink}. If you're
  352. tired of cows, a variety of other ASCII-art messengers are available.")
  353. (license license:gpl3+)))
  354. (define-public freedoom
  355. (package
  356. (name "freedoom")
  357. (version "0.11.3")
  358. (source (origin
  359. (method url-fetch)
  360. (uri (string-append "https://github.com/" name "/" name
  361. "/archive/v" version ".tar.gz"))
  362. (file-name (string-append name "-" version ".tar.gz"))
  363. (sha256
  364. (base32
  365. "1bjijdfqhpazyifx1qda7scj7dry1azhjrnl8h8zn2vqfgdmlh0q"))))
  366. (build-system gnu-build-system)
  367. (arguments
  368. '(#:make-flags `(,(string-append "prefix=" (assoc-ref %outputs "out")))
  369. #:parallel-build? #f
  370. #:tests? #f ; no check target
  371. #:phases
  372. (modify-phases %standard-phases
  373. (delete 'bootstrap)
  374. (replace 'configure
  375. (lambda* (#:key inputs outputs #:allow-other-keys)
  376. (let* ((dejavu (assoc-ref inputs "font-dejavu"))
  377. (freedoom (assoc-ref outputs "out"))
  378. (wad-dir (string-append freedoom "/share/games/doom")))
  379. ;; Replace the font-searching function in a shell
  380. ;; script with a direct path to the required font.
  381. ;; This is necessary because ImageMagick can only find the
  382. ;; most basic fonts while in the build environment.
  383. (substitute* "graphics/titlepic/create_caption"
  384. (("font=\\$\\(find_font.*$")
  385. (string-append
  386. "font=" dejavu
  387. "/share/fonts/truetype/DejaVuSansCondensed-Bold.ttf\n")))
  388. ;; Make icon creation reproducible.
  389. (substitute* "dist/Makefile"
  390. (("freedm.png")
  391. "-define png:exclude-chunks=date freedm.png")
  392. (("freedoom1.png")
  393. "-define png:exclude-chunks=date freedoom1.png")
  394. (("freedoom2.png")
  395. "-define png:exclude-chunks=date freedoom2.png"))
  396. ;; Make sure that the install scripts know where to find
  397. ;; the appropriate WAD files.
  398. (substitute* "dist/freedoom"
  399. (("IWAD=freedm.wad")
  400. (string-append "IWAD=" wad-dir "/freedm.wad"))
  401. (("IWAD=freedoom1.wad")
  402. (string-append "IWAD=" wad-dir "/freedoom1.wad"))
  403. (("IWAD=freedoom2.wad")
  404. (string-append "IWAD=" wad-dir "/freedoom2.wad")))
  405. #t))))))
  406. (native-inputs
  407. `(("asciidoc" ,asciidoc)
  408. ("deutex" ,deutex)
  409. ("font-dejavu" ,font-dejavu)
  410. ("imagemagick" ,imagemagick)
  411. ("python" ,python-2)))
  412. (inputs
  413. `(("prboom-plus" ,prboom-plus)))
  414. (home-page "https://freedoom.github.io/")
  415. (synopsis "Free content game based on the Doom engine")
  416. (native-search-paths
  417. (list (search-path-specification
  418. (variable "DOOMWADDIR")
  419. (files '("share/games/doom")))
  420. (search-path-specification
  421. (variable "DOOMWADPATH")
  422. (files '("share/games/doom")))))
  423. (description
  424. "The Freedoom project aims to create a complete free content first person
  425. shooter game. Freedoom by itself is just the raw material for a game: it must
  426. be paired with a compatible game engine (such as @code{prboom-plus}) to be
  427. played. Freedoom complements the Doom engine with free levels, artwork, sound
  428. effects and music to make a completely free game.")
  429. (license license:bsd-3)))
  430. (define-public freedroidrpg
  431. (package
  432. (name "freedroidrpg")
  433. (version "0.16.1")
  434. (source
  435. (origin
  436. (method url-fetch)
  437. (uri (string-append "http://ftp.osuosl.org/pub/freedroid/"
  438. "freedroidRPG-" (version-major+minor version) "/"
  439. "freedroidRPG-" version ".tar.gz"))
  440. (sha256
  441. (base32 "0n4kn38ncmcy3lrxmq8fjry6c1z50z4q1zcqfig0j4jb0dsz2va2"))))
  442. (build-system gnu-build-system)
  443. (arguments
  444. `(#:configure-flags
  445. (list
  446. (string-append "CFLAGS="
  447. "-I" (assoc-ref %build-inputs "sdl-gfx") "/include/SDL "
  448. "-I" (assoc-ref %build-inputs "sdl-image") "/include/SDL "
  449. "-I" (assoc-ref %build-inputs "sdl-mixer") "/include/SDL")
  450. "--enable-opengl")
  451. ;; FIXME: the test suite fails with the following error output:
  452. ;; 4586 Segmentation fault env SDL_VIDEODRIVER=dummy \
  453. ;; SDL_AUDIODRIVER=dummy ./src/freedroidRPG -nb text
  454. #:tests? #f))
  455. (native-inputs
  456. `(("pkg-config" ,pkg-config)))
  457. (inputs
  458. `(("glu" ,glu)
  459. ("libjpeg" ,libjpeg)
  460. ("libogg" ,libogg)
  461. ("libpng" ,libpng)
  462. ("libvorbis" ,libvorbis)
  463. ("mesa" ,mesa)
  464. ("python" ,python-wrapper)
  465. ("sdl" ,sdl)
  466. ("sdl-gfx" ,sdl-gfx)
  467. ("sdl-image" ,sdl-image)
  468. ("sdl-mixer" ,sdl-mixer)
  469. ("zlib" ,zlib)))
  470. (home-page "http://www.freedroid.org/")
  471. (synopsis "Isometric role-playing game against killer robots")
  472. (description
  473. "Freedroid RPG is an @dfn{RPG} (Role-Playing Game) with isometric graphics.
  474. The game tells the story of a world destroyed by a conflict between robots and
  475. their human masters. To restore peace to humankind, the player must complete
  476. numerous quests while fighting off rebelling robots---either by taking control
  477. of them, or by simply blasting them to pieces with melee and ranged weapons in
  478. real-time combat.")
  479. (license (list license:expat ; lua/
  480. license:gpl3 ; src/gen_savestruct.py
  481. license:gpl2+)))) ; the rest
  482. (define-public golly
  483. (package
  484. (name "golly")
  485. (version "3.2")
  486. (source (origin
  487. (method url-fetch)
  488. (uri (string-append "mirror://sourceforge/golly/golly/golly-"
  489. version "/golly-" version
  490. "-src.tar.gz"))
  491. (sha256
  492. (base32
  493. "0cg9mbwmf4q6qxhqlnzrxh9y047banxdb8pd3hgj3smmja2zf0jd"))))
  494. (build-system gnu-build-system)
  495. (arguments
  496. '(#:make-flags (list "CC=gcc"
  497. (string-append "GOLLYDIR="
  498. (assoc-ref %outputs "out")
  499. "/share/golly"))
  500. #:tests? #f ; no check target
  501. #:phases
  502. (modify-phases %standard-phases
  503. (replace 'configure
  504. (lambda* (#:key inputs #:allow-other-keys)
  505. ;; For some reason, setting the PYTHON_SHLIB make flag doesn't
  506. ;; properly set the path to the Python shared library. This
  507. ;; substitution acheives the same end by different means.
  508. (substitute* "gui-wx/wxprefs.cpp"
  509. (("pythonlib = wxT\\(STRINGIFY\\(PYTHON_SHLIB\\)\\)")
  510. (string-append "pythonlib = \""
  511. (assoc-ref inputs "python")
  512. "/lib/libpython-2.7.so\"")))
  513. #t))
  514. (replace 'build
  515. (lambda* (#:key make-flags outputs #:allow-other-keys)
  516. (with-directory-excursion "gui-wx"
  517. (apply invoke `("make" ,@make-flags "-f" "makefile-gtk")))))
  518. (replace 'install
  519. (lambda* (#:key outputs #:allow-other-keys)
  520. (let* ((out (assoc-ref outputs "out"))
  521. (bin (string-append out "/bin"))
  522. (doc (string-append out "/share/doc/golly"))
  523. (pixmaps (string-append out "/share/pixmaps"))
  524. (share (string-append out "/share/golly")))
  525. (for-each (lambda (binary)
  526. (install-file binary bin))
  527. '("bgolly" "golly"))
  528. (for-each (lambda (document)
  529. (install-file
  530. (string-append "docs/" document ".html")
  531. doc))
  532. '("License" "ReadMe" "ToDo"))
  533. (install-file "gui-wx/icons/appicon.xpm" pixmaps)
  534. (for-each (lambda (folder)
  535. (copy-recursively
  536. folder
  537. (string-append share "/" folder)))
  538. '("Help" "Patterns" "Rules" "Scripts")))
  539. #t)))))
  540. (native-inputs
  541. `(("lua" ,lua)))
  542. (inputs
  543. `(("glu" ,glu)
  544. ("mesa" ,mesa)
  545. ("python" ,python-2)
  546. ("wxwidgets" ,wxwidgets-gtk2)
  547. ("zlib" ,zlib)))
  548. (home-page "http://golly.sourceforge.net/")
  549. (synopsis "Software for exploring cellular automata")
  550. (description
  551. "Golly simulates Conway's Game of Life and many other types of cellular
  552. automata. The following features are available:
  553. @enumerate
  554. @item Support for bounded and unbounded universes, with cells of up to 256
  555. states.
  556. @item Support for multiple algorithms, including Bill Gosper's Hashlife
  557. algorithm.
  558. @item Loading patterns from BMP, PNG, GIF and TIFF image files.
  559. @item Reading RLE, macrocell, Life 1.05/1.06, dblife and MCell files.
  560. @item Scriptable via Lua or Python.
  561. @item Extracting patterns, rules and scripts from zip files.
  562. @item Downloading patterns, rules and scripts from online archives.
  563. @item Pasting patterns from the clipboard.
  564. @item Unlimited undo/redo.
  565. @item Configurable keyboard shortcuts.
  566. @item Auto fit option to keep patterns within the view.
  567. @end enumerate")
  568. (license license:gpl2+)))
  569. (define-public meandmyshadow
  570. (package
  571. (name "meandmyshadow")
  572. (version "0.5a")
  573. (source (origin
  574. (method url-fetch)
  575. (uri (string-append "mirror://sourceforge/meandmyshadow/"
  576. version "/meandmyshadow-" version
  577. "-src.tar.gz"))
  578. (sha256
  579. (base32
  580. "0i98v6cgmpsxy7mbb0s2y6f6qq6mkwzk2nrv1nz39ncf948aky2h"))))
  581. (build-system cmake-build-system)
  582. (arguments
  583. `(#:tests? #f)) ; there are no tests
  584. (native-inputs
  585. `(("pkg-config" ,pkg-config)))
  586. (inputs
  587. `(("curl" ,curl)
  588. ("libarchive" ,libarchive)
  589. ("lua" ,lua)
  590. ("sdl" ,(sdl-union (list sdl2
  591. sdl2-image
  592. sdl2-mixer
  593. sdl2-ttf)))))
  594. (home-page "https://acmepjz.github.io/meandmyshadow/")
  595. (synopsis "Puzzle/platform game")
  596. (description "Me and My Shadow is a puzzle/platform game in which you try
  597. to reach the exit by solving puzzles. Spikes, moving blocks, fragile blocks
  598. and much more stand between you and the exit. Record your moves and let your
  599. shadow mimic them to reach blocks you couldn't reach alone.")
  600. (license license:gpl3+)))
  601. (define-public knights
  602. (package
  603. (name "knights")
  604. (version "025")
  605. (source (origin
  606. (method url-fetch)
  607. (uri (string-append "http://www.knightsgame.org.uk/files/knights_"
  608. version "_src.tar.gz"))
  609. (sha256
  610. (base32
  611. "18vp2ygvn0s0jz8rm585jqf6hjqkam1ximq81k0r9hpmfj7wb88f"))))
  612. (build-system gnu-build-system)
  613. (arguments
  614. '(#:make-flags
  615. (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
  616. #:phases
  617. (modify-phases %standard-phases
  618. ;; No configure script.
  619. (delete 'configure))
  620. #:tests? #f)) ;; No check target.
  621. (inputs
  622. `(("boost" ,boost)
  623. ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer)))
  624. ("freetype" ,freetype)
  625. ("fontconfig" ,fontconfig)
  626. ("curl" ,curl)))
  627. (native-inputs
  628. `(("pkg-config" ,pkg-config)))
  629. (home-page "http://www.knightsgame.org.uk/")
  630. (synopsis "Multiplayer dungeon game involving knights and quests")
  631. (description "Knights is a multiplayer game involving several knights who
  632. must run around a dungeon and complete various quests. Each game revolves
  633. around a quest – for example, you might have to find some items and carry them
  634. back to your starting point. This may sound easy, but as there are only
  635. enough items in the dungeon for one player to win, you may end up having to
  636. kill your opponents to get their stuff! Other quests involve escaping from
  637. the dungeon, fighting a duel to the death against the enemy knights, or
  638. destroying an ancient book using a special wand.")
  639. ;; This package includes modified sources of lua (X11), enet (Expat), and
  640. ;; guichan (BSD-3). The "Coercri" library is released under the Boost
  641. ;; license. The whole package is released under GPLv3+.
  642. (license license:gpl3+)))
  643. (define-public gnubg
  644. (package
  645. (name "gnubg")
  646. (version "1.06.002")
  647. (source
  648. (origin
  649. (method url-fetch)
  650. (uri (string-append "http://files.gnubg.org/media/sources/gnubg-release-"
  651. version "-sources." "tar.gz"))
  652. (sha256
  653. (base32
  654. "11xwhcli1h12k6rnhhyq4jphzrhfik7i8ah3k32pqw803460n6yf"))))
  655. (build-system gnu-build-system)
  656. (inputs `(("glib" ,glib)
  657. ("readline" ,readline)
  658. ("gtk+" ,gtk+-2)
  659. ("mesa" ,mesa)
  660. ("glu" ,glu)
  661. ("gtkglext" ,gtkglext)
  662. ("sqlite" ,sqlite)
  663. ("libcanberra" ,libcanberra)))
  664. (native-inputs `(("python-2" ,python-2)
  665. ("pkg-config" ,pkg-config)))
  666. (home-page "http://gnubg.org")
  667. (synopsis "Backgammon game")
  668. (description "The GNU backgammon application can be used for playing,
  669. analyzing and teaching the game. It has an advanced evaluation engine based on
  670. artificial neural networks suitable for both beginners and advanced players. In
  671. addition to a command-line interface, it also features an attractive, 3D
  672. representation of the playing board.")
  673. (license license:gpl3+)))
  674. (define-public gnubik
  675. (package
  676. (name "gnubik")
  677. (version "2.4.3")
  678. (source
  679. (origin
  680. (method url-fetch)
  681. (uri (string-append "mirror://gnu/gnubik/gnubik-"
  682. version ".tar.gz"))
  683. (sha256
  684. (base32
  685. "1vlf924mq8hg93bsjj0rzvs0crc6psmlxyc6zn0fr7msnmpx6gib"))))
  686. (build-system gnu-build-system)
  687. (inputs `(("gtk+" ,gtk+-2)
  688. ("mesa" ,mesa)
  689. ("glu" ,glu)
  690. ("libx11" ,libx11)
  691. ("guile" ,guile-2.0)
  692. ("gtkglext" ,gtkglext)))
  693. (native-inputs `(("gettext" ,gettext-minimal)
  694. ("pkg-config" ,pkg-config)))
  695. (home-page "https://www.gnu.org/software/gnubik/")
  696. (synopsis "3d Rubik's cube game")
  697. (description
  698. "GNUbik is a puzzle game in which you must manipulate a cube to make
  699. each of its faces have a uniform color. The game is customizable, allowing
  700. you to set the size of the cube (the default is 3x3) or to change the colors.
  701. You may even apply photos to the faces instead of colors. The game is
  702. scriptable with Guile.")
  703. (license license:gpl3+)))
  704. (define-public gnushogi
  705. (package
  706. (name "gnushogi")
  707. (version "1.4.2")
  708. (source
  709. (origin
  710. (method url-fetch)
  711. (uri (string-append "mirror://gnu/gnushogi/gnushogi-"
  712. version ".tar.gz"))
  713. (sha256
  714. (base32
  715. "0a9bsl2nbnb138lq0h14jfc5xvz7hpb2bcsj4mjn6g1hcsl4ik0y"))))
  716. (arguments `(#:tests? #f)) ;; No check target.
  717. (build-system gnu-build-system)
  718. (home-page "https://www.gnu.org/software/gnushogi/")
  719. (synopsis "The game of Shogi (Japanese chess)")
  720. (description "GNU Shogi is a program that plays the game Shogi (Japanese
  721. Chess). It is similar to standard chess but this variant is far more complicated.")
  722. (license license:gpl3+)))
  723. (define-public ltris
  724. (package
  725. (name "ltris")
  726. (version "1.0.19")
  727. (source
  728. (origin
  729. (method url-fetch)
  730. (uri (string-append "http://prdownloads.sourceforge.net/lgames/"
  731. name "-" version ".tar.gz"))
  732. (sha256
  733. (base32
  734. "1895wv1fqklrj4apkz47rnkcfhfav7zjknskw6p0886j35vrwslg"))))
  735. (build-system gnu-build-system)
  736. (arguments
  737. '(;; The code in LTris uses traditional GNU semantics for inline functions
  738. #:configure-flags '("CFLAGS=-fgnu89-inline")
  739. #:phases
  740. (modify-phases %standard-phases
  741. (add-after 'set-paths 'set-sdl-paths
  742. (lambda* (#:key inputs #:allow-other-keys)
  743. (setenv "CPATH"
  744. (string-append (assoc-ref inputs "sdl-union")
  745. "/include/SDL"))
  746. #t)))))
  747. (inputs
  748. `(("sdl-union" ,(sdl-union (list sdl sdl-mixer)))))
  749. (home-page "http://lgames.sourceforge.net/LTris/")
  750. (synopsis "Tetris clone based on the SDL library")
  751. (description
  752. "LTris is a tetris clone: differently shaped blocks are falling down the
  753. rectangular playing field and can be moved sideways or rotated by 90 degree
  754. units with the aim of building lines without gaps which then disappear (causing
  755. any block above the deleted line to fall down). LTris has three game modes: In
  756. Classic you play until the stack of blocks reaches the top of the playing field
  757. and no new blocks can enter. In Figures the playing field is reset to a new
  758. figure each level and later on tiles and lines suddenly appear. In Multiplayer
  759. up to three players (either human or CPU) compete with each other sending
  760. removed lines to all opponents. There is also a Demo mode in which you can
  761. watch your CPU playing while enjoying a cup of tea!")
  762. (license license:gpl2+)))
  763. (define-public nethack
  764. (package
  765. (name "nethack")
  766. (version "3.6.1")
  767. (source
  768. (origin
  769. (method url-fetch)
  770. (uri (string-append "https://www.nethack.org/download/"
  771. version "/" name "-361-src.tgz"))
  772. (sha256
  773. (base32 "1dha0ijvxhx7c9hr0452h93x81iiqsll8bc9msdnp7xdqcfbz32b"))))
  774. (inputs
  775. `(("ncurses" ,ncurses)
  776. ("bison" ,bison)
  777. ("flex" ,flex)
  778. ("less" ,less)))
  779. (build-system gnu-build-system)
  780. (arguments
  781. '(#:make-flags
  782. `(,(string-append "PREFIX=" (assoc-ref %outputs "out")))
  783. #:phases
  784. (modify-phases %standard-phases
  785. (add-before 'configure 'patch-paths
  786. (lambda _
  787. (substitute* "sys/unix/nethack.sh"
  788. (("^ *cd .*$") ""))
  789. (substitute* "sys/unix/Makefile.utl"
  790. (("^YACC *=.*$") "YACC = bison -y\n")
  791. (("^LEX *=.*$") "LEX = flex\n")
  792. (("^# CC = gcc") "CC = gcc"))
  793. (substitute* "sys/unix/hints/linux"
  794. (("/bin/gzip") (string-append
  795. (assoc-ref %build-inputs "gzip")
  796. "/bin/gzip"))
  797. (("^WINTTYLIB=.*") "WINTTYLIB=-lncurses"))
  798. (substitute* "include/config.h"
  799. (("^.*define CHDIR.*$") "")
  800. (("^/\\* *#*define *REPRODUCIBLE_BUILD *\\*/")
  801. ;; Honor SOURCE_DATE_EPOCH.
  802. "#define REPRODUCIBLE_BUILD"))
  803. ;; Note: 'makedefs' rejects and ignores dates that are too old
  804. ;; or too new, so we must choose something reasonable here.
  805. (setenv "SOURCE_DATE_EPOCH" "1531865062")
  806. (substitute* "sys/unix/Makefile.src"
  807. (("^# CC = gcc") "CC = gcc"))
  808. #t))
  809. (replace 'configure
  810. (lambda _
  811. (let ((bash (string-append
  812. (assoc-ref %build-inputs "bash")
  813. "/bin/bash")))
  814. (with-directory-excursion "sys/unix"
  815. (substitute* "setup.sh" (("/bin/sh") bash))
  816. (invoke bash "setup.sh" "hints/linux"))
  817. #t)))
  818. (add-after 'install 'fixup-paths
  819. (lambda _
  820. (let* ((output (assoc-ref %outputs "out"))
  821. (nethack-script (string-append output "/bin/nethack")))
  822. (mkdir-p (string-append output "/games/lib/nethackuserdir"))
  823. (for-each
  824. (lambda (file)
  825. (rename-file
  826. (string-append output "/games/lib/nethackdir/" file)
  827. (string-append output "/games/lib/nethackuserdir/"
  828. file)))
  829. '("xlogfile" "logfile" "perm" "record" "save"))
  830. (mkdir-p (string-append output "/bin"))
  831. (call-with-output-file nethack-script
  832. (lambda (port)
  833. (format port "#!~a/bin/sh
  834. PATH=~a:$PATH
  835. if [ ! -d ~~/.config/nethack ]; then
  836. mkdir -p ~~/.config/nethack
  837. cp -r ~a/games/lib/nethackuserdir/* ~~/.config/nethack
  838. chmod -R +w ~~/.config/nethack
  839. fi
  840. RUNDIR=$(mktemp -d)
  841. cleanup() {
  842. rm -rf $RUNDIR
  843. }
  844. trap cleanup EXIT
  845. cd $RUNDIR
  846. for i in ~~/.config/nethack/*; do
  847. ln -s $i $(basename $i)
  848. done
  849. for i in ~a/games/lib/nethackdir/*; do
  850. ln -s $i $(basename $i)
  851. done
  852. ~a/games/nethack"
  853. (assoc-ref %build-inputs "bash")
  854. (list->search-path-as-string
  855. (list
  856. (string-append
  857. (assoc-ref %build-inputs "coreutils") "/bin")
  858. (string-append
  859. (assoc-ref %build-inputs "less") "/bin"))
  860. ":")
  861. output
  862. output
  863. output)))
  864. (chmod nethack-script #o555)
  865. #t)))
  866. (delete 'check))))
  867. (home-page "https://nethack.org")
  868. (synopsis "Classic dungeon crawl game")
  869. (description "NetHack is a single player dungeon exploration game that runs
  870. on a wide variety of computer systems, with a variety of graphical and text
  871. interfaces all using the same game engine. Unlike many other Dungeons &
  872. Dragons-inspired games, the emphasis in NetHack is on discovering the detail of
  873. the dungeon and not simply killing everything in sight - in fact, killing
  874. everything in sight is a good way to die quickly. Each game presents a
  875. different landscape - the random number generator provides an essentially
  876. unlimited number of variations of the dungeon and its denizens to be discovered
  877. by the player in one of a number of characters: you can pick your race, your
  878. role, and your gender.")
  879. (license
  880. (license:fsdg-compatible
  881. "https://nethack.org/common/license.html"))))
  882. (define-public pipewalker
  883. (package
  884. (name "pipewalker")
  885. (version "0.9.4")
  886. (source
  887. (origin
  888. (method url-fetch)
  889. (uri (string-append "http://downloads.sourceforge.net/pipewalker/"
  890. name "-" version ".tar.gz"))
  891. (sha256
  892. (base32
  893. "1x46wgk0s55562pd96cxagxkn6wpgglq779f9b64ff1k3xzp3myn"))))
  894. (build-system gnu-build-system)
  895. (arguments
  896. `(#:configure-flags
  897. (list (string-append "--docdir=" (assoc-ref %outputs "out")
  898. "/share/doc/" ,name "-" ,version))
  899. #:phases
  900. (modify-phases %standard-phases
  901. (add-after 'configure 'patch-docdir
  902. ;; Makefile.in ignores configure's ‘--docdir=...’ option. Fix that.
  903. (lambda _
  904. (substitute* "Makefile"
  905. (("(pkgdocdatadir = ).*" _ assignment)
  906. (string-append assignment "$(docdir)\n")))
  907. #t)))))
  908. (inputs
  909. `(("libpng" ,libpng)
  910. ("mesa" ,mesa)
  911. ("sdl" ,sdl)))
  912. (home-page "http://pipewalker.sourceforge.net/")
  913. (synopsis "Logical tile puzzle")
  914. (description
  915. "PipeWalker is a simple puzzle game with many diffent themes: connect all
  916. computers to one network server, bring water from a source to the taps, etc.
  917. The underlying mechanism is always the same: you must turn each tile in the
  918. grid in the right direction to combine all components into a single circuit.
  919. Every puzzle has a complete solution, although there may be more than one.")
  920. (license license:gpl3+)))
  921. (define-public prboom-plus
  922. (package
  923. (name "prboom-plus")
  924. (version "2.5.1.4")
  925. (source (origin
  926. (method url-fetch)
  927. (uri (string-append "mirror://sourceforge/" name "/" name "/"
  928. version "/" name "-" version ".tar.gz"))
  929. (sha256
  930. (base32
  931. "151v6nign86m1a2vqz27krsccpc9m4d1jax4y43v2fa82wfj9qp0"))
  932. (modules '((guix build utils)))
  933. (snippet
  934. '(begin
  935. (substitute* "src/version.c"
  936. (("__DATE__") "")
  937. (("__TIME__") ""))
  938. #t))))
  939. (build-system gnu-build-system)
  940. (arguments
  941. '(#:configure-flags '("--disable-cpu-opt")
  942. #:make-flags `(,(string-append "gamesdir="
  943. (assoc-ref %outputs "out") "/bin"))
  944. #:phases
  945. (modify-phases %standard-phases
  946. (add-after 'set-paths 'set-sdl'paths
  947. (lambda* (#:key inputs #:allow-other-keys)
  948. (setenv "CPATH"
  949. (string-append (assoc-ref inputs "sdl-union")
  950. "/include/SDL"))
  951. #t)))))
  952. (inputs
  953. `(("fluidsynth" ,fluidsynth)
  954. ("glu" ,glu)
  955. ("libmad" ,libmad)
  956. ("libpng" ,libpng)
  957. ("libvorbis" ,libvorbis)
  958. ("pcre" ,pcre)
  959. ("portmidi" ,portmidi)
  960. ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer sdl-net)))))
  961. (home-page "http://prboom-plus.sourceforge.net/")
  962. (synopsis "Version of the classic 3D shoot'em'up game Doom")
  963. (description
  964. "PrBoom+ is a Doom source port developed from the original PrBoom project.")
  965. (license license:gpl2+)))
  966. (define-public retux
  967. (package
  968. (name "retux")
  969. (version "1.3.6")
  970. (source (origin
  971. (method url-fetch)
  972. (uri (string-append "mirror://savannah/retux/"
  973. (version-major+minor version) "/retux-"
  974. version "-src.tar.gz"))
  975. (sha256
  976. (base32
  977. "01bidh4zisjp3nc436x0g85v60dvwb3ig37i7y01sa71j8fm4fmb"))))
  978. (build-system python-build-system)
  979. (arguments
  980. `(#:tests? #f ; no check target
  981. #:phases
  982. (modify-phases %standard-phases
  983. ;; no setup.py script
  984. (delete 'build)
  985. (replace 'install
  986. (lambda* (#:key outputs #:allow-other-keys)
  987. (let* ((out (assoc-ref outputs "out"))
  988. (bin (string-append out "/bin"))
  989. (data (string-append out "/share/retux"))
  990. (doc (string-append out "/share/doc/retux")))
  991. (mkdir-p bin)
  992. (substitute* "retux.py"
  993. ;; Use the correct data directory.
  994. (("os\\.path\\.join\\(os\\.path\\.dirname\\(__file__\\), \"data\"\\),")
  995. (string-append "\"" data "\","))
  996. ;; Use Python 3 so the patch-shebangs phase works properly.
  997. ((".*python2.*") "#!/usr/bin/python3"))
  998. (copy-file "retux.py" (string-append bin "/retux"))
  999. (copy-recursively "data" data)
  1000. (install-file "COPYING" doc)
  1001. #t))))))
  1002. (inputs
  1003. `(("python-sge-pygame" ,python-sge-pygame)
  1004. ("python-six" ,python-six)
  1005. ("python-xsge" ,python-xsge)))
  1006. (home-page "http://retux.nongnu.org")
  1007. (synopsis "Action platformer game")
  1008. (description
  1009. "ReTux is an action platformer loosely inspired by the Mario games,
  1010. utilizing the art assets from the @code{SuperTux} project.")
  1011. ;; GPL version 3 or later is the license for the code and some art.
  1012. ;; The rest of the licenses are for the art exclusively, as listed in
  1013. ;; data/LICENSES.
  1014. (license (list license:cc0
  1015. license:cc-by3.0
  1016. license:cc-by-sa3.0
  1017. license:cc-by-sa4.0
  1018. license:gpl2+
  1019. license:gpl3+))))
  1020. (define-public roguebox-adventures
  1021. (package
  1022. (name "roguebox-adventures")
  1023. (version "2.2.1")
  1024. (source
  1025. (origin
  1026. (method url-fetch)
  1027. (uri (string-append
  1028. "http://download.tuxfamily.org/rba/RogueBoxAdventures_v"
  1029. (string-join (string-split version #\.) "_") "_Source.zip"))
  1030. (file-name (string-append name "-" version ".zip"))
  1031. (sha256
  1032. (base32
  1033. "0kmzdgnik8fsf3bg55546l77p3mfxn2awkzfzzdn20n82rd2babw"))))
  1034. (build-system python-build-system)
  1035. (arguments
  1036. `(#:tests? #f ; no check target
  1037. #:phases
  1038. (modify-phases %standard-phases
  1039. (replace 'unpack
  1040. (lambda* (#:key source #:allow-other-keys)
  1041. (and (invoke "unzip" source)
  1042. ;; The actual source is buried a few directories deep.
  1043. (chdir (string-append "RogueBoxAdventures_v"
  1044. (string-join
  1045. (string-split ,version #\.) "_")
  1046. "_Source")))))
  1047. ;; no setup.py script
  1048. (replace 'build
  1049. (lambda* (#:key outputs #:allow-other-keys)
  1050. (let* ((out (assoc-ref outputs "out"))
  1051. (data (string-append
  1052. out "/share/games/roguebox-adventures")))
  1053. ;; Use the correct data directory.
  1054. (substitute* '("main.py" "LIB/getch.py" "LIB/getch_gcwz.py")
  1055. (("basic_path + os\\.sep + 'DATA'")
  1056. (string-append "'" data "'"))
  1057. (("^basic_path.*$")
  1058. (string-append "basic_path ='" data "'\n")))
  1059. (substitute* "LIB/gra_files.py"
  1060. (("basic_path = b_path\\.replace\\('/LIB',''\\)")
  1061. (string-append "basic_path ='" data "'\n")))
  1062. ;; The game must save in the user's home directory because
  1063. ;; the store is read-only.
  1064. (substitute* "main.py"
  1065. (("home_save = False") "home_save = True")
  1066. (("'icon_small.png'")
  1067. (string-append "'" data "/icon_small.png'"))))
  1068. #t))
  1069. (replace 'install
  1070. (lambda* (#:key outputs #:allow-other-keys)
  1071. (let* ((out (assoc-ref outputs "out"))
  1072. (bin (string-append out "/bin"))
  1073. (roguebox-adventures
  1074. (string-append bin "/roguebox-adventures"))
  1075. (data (string-append
  1076. out "/share/games/roguebox-adventures"))
  1077. (lib (string-append data "/LIB"))
  1078. (doc (string-append
  1079. out "/share/doc/roguebox-adventures")))
  1080. (mkdir-p bin)
  1081. (mkdir-p doc)
  1082. (for-each (lambda (file)
  1083. (copy-recursively file
  1084. (string-append data "/" file)))
  1085. '("AUDIO" "FONT" "GRAPHIC" "LIB" "LICENSE"
  1086. "icon_big.png" "icon_small.png"))
  1087. (for-each (lambda (file)
  1088. (chmod file #o555)
  1089. (install-file file lib))
  1090. '("main.py" "run.py"))
  1091. (copy-recursively "DOC" doc)
  1092. (call-with-output-file
  1093. roguebox-adventures
  1094. (lambda (p)
  1095. (format p "\
  1096. #!~a
  1097. export PYTHONPATH=~a/LIB:~a
  1098. exec -a \"~a\" ~a \"$@\"\n"
  1099. (which "bash") data (getenv "PYTHONPATH")
  1100. (which "python3")
  1101. (string-append lib "/main.py"))))
  1102. (chmod roguebox-adventures #o555))
  1103. #t)))))
  1104. (native-inputs
  1105. `(("unzip" ,unzip)))
  1106. (inputs
  1107. `(("python-pygame" ,python-pygame)
  1108. ("python-tmx" ,python-tmx)))
  1109. (home-page "https://rogueboxadventures.tuxfamily.org")
  1110. (synopsis "A classical roguelike/sandbox game")
  1111. (description
  1112. "RogueBox Adventures is a graphical roguelike with strong influences
  1113. from sandbox games like Minecraft or Terraria. The main idea of RogueBox
  1114. Adventures is to offer the player a kind of roguelike toy-world. This world
  1115. can be explored and changed freely.")
  1116. ;; The GPL3+ is for code, the rest are for art.
  1117. (license (list license:cc0
  1118. license:cc-by3.0
  1119. license:gpl3+
  1120. license:silofl1.1))))
  1121. (define-public xshogi
  1122. (package
  1123. (name "xshogi")
  1124. (version "1.4.2")
  1125. (source
  1126. (origin
  1127. (method url-fetch)
  1128. (uri (string-append "mirror://gnu/gnushogi/xshogi-"
  1129. version ".tar.gz"))
  1130. (sha256
  1131. (base32
  1132. "1dns0nhymak44by18sv48m4xb2skiwbi2i3nb9hl6w9iwd2i2brf"))))
  1133. (build-system gnu-build-system)
  1134. (inputs
  1135. `(("libxaw" ,libxaw)
  1136. ("libxt" ,libxt)))
  1137. (home-page "https://www.gnu.org/software/gnushogi/")
  1138. (synopsis "User interface for gnushogi")
  1139. (description "A graphical user interface for the package @code{gnushogi}.")
  1140. ;; Contains a copy of GPLv3 but the licence notices simply
  1141. ;; state "GNU General Public Licence" without specifying a version.
  1142. (license license:gpl1+)))
  1143. (define-public abbaye
  1144. (package
  1145. (name "abbaye")
  1146. (version "2.0.1")
  1147. (source
  1148. (origin
  1149. (method url-fetch)
  1150. (uri (string-append "https://github.com/nevat/abbayedesmorts-gpl/"
  1151. "archive/v" version ".tar.gz"))
  1152. (file-name (string-append name "-" version ".tar.gz"))
  1153. (sha256
  1154. (base32
  1155. "1a67b0hq6271dd7pvwndjq29cwn2n8gawwz17xafa3k1hrhf8vw3"))
  1156. (modules '((guix build utils)))
  1157. (snippet
  1158. ;; Unbundle fonts.
  1159. '(begin
  1160. (delete-file-recursively "fonts")
  1161. #t))))
  1162. (build-system gnu-build-system)
  1163. (arguments
  1164. '(#:make-flags '("CC=gcc")
  1165. #:phases (modify-phases %standard-phases
  1166. (add-after 'set-paths 'set-sdl-paths
  1167. (lambda* (#:key inputs #:allow-other-keys)
  1168. (setenv "CPATH"
  1169. (string-append (assoc-ref inputs "sdl-union")
  1170. "/include/SDL"))))
  1171. (add-after 'patch-source-shebangs 'patch-makefile
  1172. (lambda* (#:key outputs #:allow-other-keys)
  1173. ;; Replace /usr with package output directory.
  1174. (substitute* "Makefile"
  1175. (("/usr") (assoc-ref outputs "out")))))
  1176. (add-before 'install 'make-install-dirs
  1177. (lambda* (#:key outputs #:allow-other-keys)
  1178. (let ((prefix (assoc-ref outputs "out")))
  1179. ;; Create directories that the makefile assumes exist.
  1180. (mkdir-p (string-append prefix "/bin"))
  1181. (mkdir-p (string-append prefix "/share/applications"))
  1182. (mkdir-p (string-append prefix "/share/pixmaps")))))
  1183. ;; No configure script.
  1184. (delete 'configure))
  1185. #:tests? #f)) ;; No check target.
  1186. (native-inputs `(("pkg-config" ,pkg-config)))
  1187. (inputs `(("sdl-union" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer)))))
  1188. (home-page "https://github.com/nevat/abbayedesmorts-gpl")
  1189. (synopsis "GNU/Linux port of the indie game \"l'Abbaye des Morts\"")
  1190. (description "L'Abbaye des Morts is a 2D platform game set in 13th century
  1191. France. The Cathars, who preach about good Christian beliefs, were being
  1192. expelled by the Catholic Church out of the Languedoc region in France. One of
  1193. them, called Jean Raymond, found an old church in which to hide, not knowing
  1194. that beneath its ruins lay buried an ancient evil.")
  1195. (license license:gpl3)))
  1196. (define-public angband
  1197. (package
  1198. (name "angband")
  1199. (version "4.1.3")
  1200. (source
  1201. (origin
  1202. (method url-fetch)
  1203. (uri (string-append "http://rephial.org/downloads/"
  1204. (version-major+minor version)
  1205. "/angband-" version ".tar.gz"))
  1206. (sha256
  1207. (base32
  1208. "0vs0314lbdc6rzxn4jnb7zp6n1p1cdb8r53savadn7k9vbwc80ll"))
  1209. (modules '((guix build utils)))
  1210. (snippet
  1211. ;; So, some of the sounds/graphics/tilesets are under different
  1212. ;; licenses... some of them even nonfree! This is a console-only
  1213. ;; version of this package so we just remove them.
  1214. ;; In the future, if someone tries to make a graphical variant of
  1215. ;; this package, they can deal with that mess themselves. :)
  1216. '(begin
  1217. (for-each (lambda (subdir)
  1218. (let ((lib-subdir (string-append "lib/" subdir)))
  1219. (delete-file-recursively lib-subdir)))
  1220. '("fonts" "icons" "sounds" "tiles"))
  1221. (substitute* "lib/Makefile"
  1222. ;; And don't try to invoke makefiles in the directories we removed
  1223. (("gamedata customize help screens fonts tiles sounds icons user")
  1224. "gamedata customize help screens user"))
  1225. #t))))
  1226. (build-system gnu-build-system)
  1227. (arguments
  1228. `(#:tests? #f ; no check target
  1229. #:configure-flags (list (string-append "--bindir=" %output "/bin"))
  1230. #:phases
  1231. (modify-phases %standard-phases
  1232. (replace 'bootstrap
  1233. (lambda _
  1234. (substitute* "acinclude.m4"
  1235. (("ncursesw5-config") "ncursesw6-config"))
  1236. (invoke "sh" "autogen.sh"))))))
  1237. (native-inputs
  1238. `(("autoconf" ,autoconf)
  1239. ("automake" ,automake)))
  1240. (inputs `(("ncurses" ,ncurses)))
  1241. (home-page "http://rephial.org/")
  1242. (synopsis "Dungeon exploration roguelike")
  1243. (description "Angband is a Classic dungeon exploration roguelike. Explore
  1244. the depths below Angband, seeking riches, fighting monsters, and preparing to
  1245. fight Morgoth, the Lord of Darkness.")
  1246. (license license:gpl2)))
  1247. (define-public pingus
  1248. (package
  1249. (name "pingus")
  1250. (version "0.7.6")
  1251. (source
  1252. (origin
  1253. (method git-fetch)
  1254. (uri (git-reference
  1255. (url "https://github.com/Pingus/pingus.git")
  1256. (commit (string-append "v" version))))
  1257. (file-name (git-file-name name version))
  1258. (sha256
  1259. (base32
  1260. "0wp06kcmknsnxz7bjnsndb8x062z7r23fb3yrnbfnj68qhz18y74"))
  1261. (patches (search-patches "pingus-boost-headers.patch"
  1262. "pingus-sdl-libs-config.patch"))))
  1263. (build-system gnu-build-system)
  1264. (native-inputs `(("pkg-config" ,pkg-config)
  1265. ("scons-python2" ,scons-python2)))
  1266. (inputs `(("sdl" ,sdl)
  1267. ("sdl-image" ,sdl-image)
  1268. ("sdl-mixer" ,sdl-mixer)
  1269. ("mesa" ,mesa)
  1270. ("glu" ,glu)
  1271. ("libpng" ,libpng)
  1272. ("boost" ,boost)))
  1273. (arguments
  1274. '(#:make-flags (list (string-append "PREFIX=" %output))
  1275. #:tests? #f ; no check target
  1276. #:phases
  1277. (modify-phases %standard-phases
  1278. (delete 'configure)))) ; no configure script
  1279. (home-page "https://pingus.seul.org/")
  1280. (synopsis "Lemmings clone")
  1281. (description
  1282. "Pingus is a free Lemmings-like puzzle game in which the player takes
  1283. command of a bunch of small animals and has to guide them through levels.
  1284. Since the animals walk on their own, the player can only influence them by
  1285. giving them commands, like build a bridge, dig a hole, or redirect all animals
  1286. in the other direction. Multiple such commands are necessary to reach the
  1287. level's exit. The game is presented in a 2D side view.")
  1288. ;; Some source files are under bsd-3 and gpl2+ licenses.
  1289. (license license:gpl3+)))
  1290. (define-public talkfilters
  1291. (package
  1292. (name "talkfilters")
  1293. (version "2.3.8")
  1294. (source
  1295. (origin
  1296. (method url-fetch)
  1297. (uri (string-append "http://www.hyperrealm.com/" name "/"
  1298. name "-" version ".tar.gz"))
  1299. (sha256
  1300. (base32 "19nc5vq4bnkjvhk8srqddzhcs93jyvpm9r6lzjzwc1mgf08yg0a6"))))
  1301. (build-system gnu-build-system)
  1302. (home-page "https://www.gnu.org/software/talkfilters/")
  1303. (synopsis "Convert English text to humorous dialects")
  1304. (description "The GNU Talk Filters are programs that convert English text
  1305. into stereotyped or otherwise humorous dialects. The filters are provided as
  1306. a C library, so they can easily be integrated into other programs.")
  1307. (license license:gpl2+)))
  1308. (define-public cmatrix
  1309. (package
  1310. (name "cmatrix")
  1311. (version "1.2a")
  1312. (source
  1313. (origin
  1314. (method url-fetch)
  1315. (uri (string-append "http://www.asty.org/cmatrix/dist/cmatrix-" version
  1316. ".tar.gz"))
  1317. (sha256
  1318. (base32
  1319. "0k06fw2n8nzp1pcdynhajp5prba03gfgsbj91bknyjr5xb5fd9hz"))))
  1320. (build-system gnu-build-system)
  1321. (arguments
  1322. '(#:phases
  1323. (modify-phases %standard-phases
  1324. (replace 'configure
  1325. (lambda* (#:key outputs #:allow-other-keys)
  1326. ;; This old ‘configure’ script doesn't support
  1327. ;; variables passed as arguments.
  1328. (let ((out (assoc-ref outputs "out")))
  1329. (setenv "CONFIG_SHELL" (which "bash"))
  1330. (invoke "./configure"
  1331. (string-append "--prefix=" out))))))))
  1332. (inputs `(("ncurses" ,ncurses)))
  1333. (home-page "http://www.asty.org/cmatrix")
  1334. (synopsis "Simulate the display from \"The Matrix\"")
  1335. (description "CMatrix simulates the display from \"The Matrix\" and is
  1336. based on the screensaver from the movie's website. It works with terminal
  1337. settings up to 132x300 and can scroll lines all at the same rate or
  1338. asynchronously and at a user-defined speed.")
  1339. (license license:gpl2+)))
  1340. (define-public chess
  1341. (package
  1342. (name "chess")
  1343. (version "6.2.5")
  1344. (source
  1345. (origin
  1346. (method url-fetch)
  1347. (uri (string-append "mirror://gnu/chess/gnuchess-" version
  1348. ".tar.gz"))
  1349. (sha256
  1350. (base32
  1351. "00j8s0npgfdi41a0mr5w9qbdxagdk2v41lcr42rwl1jp6miyk6cs"))))
  1352. (build-system gnu-build-system)
  1353. (home-page "https://www.gnu.org/software/chess/")
  1354. (synopsis "Full chess implementation")
  1355. (description "GNU Chess is a chess engine. It allows you to compete
  1356. against the computer in a game of chess, either through the default terminal
  1357. interface or via an external visual interface such as GNU XBoard.")
  1358. (license license:gpl3+)))
  1359. (define freedink-engine
  1360. (package
  1361. (name "freedink-engine")
  1362. (version "109.4")
  1363. (source (origin
  1364. (method url-fetch)
  1365. (uri (string-append "mirror://gnu/freedink/freedink-" version
  1366. ".tar.gz"))
  1367. (sha256
  1368. (base32
  1369. "0iaagwnyfgm3mqzkj550q60hrsjr13gykg5vfn2nz2ia520bb52g"))))
  1370. (build-system gnu-build-system)
  1371. (arguments
  1372. `(#:configure-flags '("--disable-embedded-resources")
  1373. #:phases
  1374. (modify-phases %standard-phases
  1375. (add-after 'unpack 'disable-graphical-tests
  1376. (lambda _
  1377. ;; These tests require a graphical interface.
  1378. (substitute* "src/Makefile.am"
  1379. (("test_gfx_fonts TestIOGfxDisplay") ""))
  1380. #t)))))
  1381. (native-inputs `(("autoconf" ,autoconf)
  1382. ("automake" ,automake)
  1383. ("cxxtest" ,cxxtest)
  1384. ("gettext" ,gettext-minimal)
  1385. ("help2man" ,help2man)
  1386. ("pkg-config" ,pkg-config)))
  1387. (inputs `(("sdl-union" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer
  1388. sdl2-ttf sdl2-gfx)))
  1389. ("fontconfig" ,fontconfig)
  1390. ("glm" ,glm)))
  1391. (properties '((ftp-directory . "/freedink")
  1392. (upstream-name . "freedink")))
  1393. (home-page "https://www.gnu.org/software/freedink/")
  1394. (synopsis "Twisted adventures of young pig farmer Dink Smallwood")
  1395. (description
  1396. "GNU FreeDink is a free and portable re-implementation of the engine
  1397. for the role-playing game Dink Smallwood. It supports not only the original
  1398. game data files but it also supports user-produced game mods or \"D-Mods\".
  1399. To that extent, it also includes a front-end for managing all of your D-Mods.")
  1400. (license license:gpl3+)))
  1401. (define freedink-data
  1402. (package
  1403. (name "freedink-data")
  1404. (version "1.08.20190120")
  1405. (source (origin
  1406. (method url-fetch)
  1407. (uri (string-append "mirror://gnu/freedink/freedink-data-"
  1408. version ".tar.gz"))
  1409. (sha256
  1410. (base32
  1411. "17gvryadlxk172mblbsil7hina1z5wahwaxnr6g3mdq57dvl8pvi"))))
  1412. (build-system gnu-build-system)
  1413. (arguments
  1414. `(#:phases
  1415. (modify-phases %standard-phases
  1416. (delete 'configure) ; no configure script
  1417. (delete 'check)) ; no tests
  1418. #:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")))))
  1419. (properties '((ftp-directory . "/freedink")))
  1420. (home-page "https://www.gnu.org/software/freedink/")
  1421. (synopsis "Game data for GNU Freedink")
  1422. (description
  1423. "This package contains the game data of GNU Freedink.")
  1424. (license license:gpl3+)))
  1425. (define-public freedink-dfarc
  1426. (package
  1427. (name "freedink-dfarc")
  1428. (version "3.14")
  1429. (source (origin
  1430. (method url-fetch)
  1431. (uri (string-append "mirror://gnu/freedink/dfarc-"
  1432. version ".tar.gz"))
  1433. (sha256
  1434. (base32
  1435. "1yp8n3w426xnlp10xk06vfi2y3k9xrcfyck7s7qs1v0ys7n284d5"))))
  1436. (build-system gnu-build-system)
  1437. (native-inputs
  1438. `(("intltool" ,intltool)))
  1439. (inputs
  1440. `(("bzip2" ,bzip2)
  1441. ("wxwidgets" ,wxwidgets)))
  1442. (properties '((ftp-directory . "/freedink")
  1443. (upstream-name . "dfarc")))
  1444. (home-page "https://www.gnu.org/software/freedink/")
  1445. (synopsis "Front-end for managing and playing Dink Modules")
  1446. (description "DFArc makes it easy to play and manage the GNU FreeDink game
  1447. and its numerous D-Mods.")
  1448. (license license:gpl3+)))
  1449. (define-public freedink
  1450. ;; This is a wrapper that tells the engine where to find the data.
  1451. (package (inherit freedink-engine)
  1452. (name "freedink")
  1453. (build-system trivial-build-system)
  1454. (arguments
  1455. '(#:builder (begin
  1456. (use-modules (guix build utils))
  1457. (let* ((output (assoc-ref %outputs "out"))
  1458. (bin (string-append output "/bin"))
  1459. (executable (string-append bin "/freedink")))
  1460. (mkdir-p bin)
  1461. (call-with-output-file executable
  1462. (lambda (port)
  1463. (format port "#!~a/bin/sh
  1464. exec ~a/bin/freedink -refdir ~a/share/dink\n"
  1465. (assoc-ref %build-inputs "bash")
  1466. (assoc-ref %build-inputs "engine")
  1467. (assoc-ref %build-inputs "data"))
  1468. (chmod port #o777)))
  1469. #t))
  1470. #:modules ((guix build utils))))
  1471. (inputs `(("engine" ,freedink-engine)
  1472. ("data" ,freedink-data)
  1473. ("bash" ,bash)))
  1474. (native-inputs '())))
  1475. (define-public xboard
  1476. (package
  1477. (name "xboard")
  1478. (version "4.9.1")
  1479. (source
  1480. (origin
  1481. (method url-fetch)
  1482. (uri (string-append "mirror://gnu/xboard/xboard-" version
  1483. ".tar.gz"))
  1484. (sha256
  1485. (base32
  1486. "1mkh36xnnacnz9r00b5f9ld9309k32jv6mcavklbdnca8bl56bib"))))
  1487. (build-system gnu-build-system)
  1488. (inputs
  1489. `(("gtk+" ,gtk+-2)
  1490. ("librsvg" ,librsvg)))
  1491. (native-inputs
  1492. `(("texinfo" ,texinfo)
  1493. ("pkg-config" ,pkg-config)))
  1494. (home-page "https://www.gnu.org/software/xboard/")
  1495. (synopsis "Graphical user interface for chess programs")
  1496. (description "GNU XBoard is a graphical board for all varieties of chess,
  1497. including international chess, xiangqi (Chinese chess), shogi (Japanese chess)
  1498. and Makruk. Several lesser-known variants are also supported. It presents a
  1499. fully interactive graphical interface and it can load and save games in the
  1500. Portable Game Notation.")
  1501. (license license:gpl3+)))
  1502. (define-public gtypist
  1503. (package
  1504. (name "gtypist")
  1505. (version "2.9.5")
  1506. (source (origin
  1507. (method url-fetch)
  1508. (uri (string-append "mirror://gnu/gtypist/gtypist-"
  1509. version ".tar.xz"))
  1510. (sha256
  1511. (base32
  1512. "0xzrkkmj0b1dw3yr0m9hml2y634cc4h61im6zwcq57s7285z8fn1"))
  1513. (modules '((guix build utils)))
  1514. (snippet
  1515. ;; We do not provide `ncurses.h' within an `ncursesw'
  1516. ;; sub-directory, so patch the source accordingly. See
  1517. ;; <http://bugs.gnu.org/19018>.
  1518. '(begin
  1519. (for-each (lambda (file)
  1520. (substitute* file
  1521. (("ncursesw/ncurses.h")
  1522. "ncurses.h")))
  1523. (find-files "." "configure$|\\.c$"))
  1524. #t))))
  1525. (build-system gnu-build-system)
  1526. (inputs `(("ncurses" ,ncurses)
  1527. ("perl" ,perl)))
  1528. (home-page "https://www.gnu.org/software/gtypist/")
  1529. (synopsis "Typing tutor")
  1530. (description
  1531. "GNU Typist is a universal typing tutor. It can be used to learn and
  1532. practice touch-typing. Several tutorials are included; in addition to
  1533. tutorials for the standard QWERTY layout, there are also tutorials for the
  1534. alternative layouts Dvorak and Colemak, as well as for the numpad. Tutorials
  1535. are primarily in English, however some in other languages are provided.")
  1536. (license license:gpl3+)))
  1537. (define-public irrlicht
  1538. (package
  1539. (name "irrlicht")
  1540. (version "1.8.4")
  1541. (source (origin
  1542. (method url-fetch)
  1543. (uri (string-append
  1544. "mirror://sourceforge/irrlicht/Irrlicht%20SDK/"
  1545. (version-major+minor version)
  1546. "/" version "/irrlicht-" version ".zip"))
  1547. (sha256
  1548. (base32
  1549. "0cz4z4dwrv5ypl19ll67wl6jjpy5k6ly4vr042w4br88qq5jhazl"))
  1550. (patches (search-patches "irrlicht-use-system-libs.patch"))
  1551. (modules '((guix build utils)))
  1552. (snippet
  1553. '(begin
  1554. (for-each delete-file-recursively
  1555. '("bin" ; bundled compiled Windows binaries"
  1556. "source/Irrlicht/MacOSX"
  1557. "source/Irrlicht/bzip2"
  1558. "source/Irrlicht/jpeglib"
  1559. "source/Irrlicht/libpng"
  1560. "source/Irrlicht/lzma"
  1561. "source/Irrlicht/zlib"))
  1562. (delete-file "source/Irrlicht/glext.h")
  1563. (delete-file "source/Irrlicht/glxext.h")
  1564. (delete-file "source/Irrlicht/wglext.h")
  1565. #t))))
  1566. (build-system gnu-build-system)
  1567. (arguments
  1568. `(#:phases
  1569. (modify-phases %standard-phases
  1570. (add-after 'unpack 'chdir-to-source
  1571. (lambda _
  1572. ;; The actual source is buried a few directories deep.
  1573. (chdir "source/Irrlicht/")
  1574. #t))
  1575. (add-after 'chdir-to-source 'fix-build-env
  1576. (lambda* (#:key outputs #:allow-other-keys)
  1577. (let ((out (assoc-ref outputs "out")))
  1578. (substitute* "Makefile"
  1579. (("INSTALL_DIR = /usr/local/lib")
  1580. (string-append "INSTALL_DIR = " out "/lib"))
  1581. ;; Add '-fpermissive' to the CXXFLAGS
  1582. (("-Wall") "-Wall -fpermissive")) ; CImageLoaderJPG.cpp
  1583. ;; The Makefile assumes these directories exist.
  1584. (mkdir-p (string-append out "/lib"))
  1585. (mkdir-p (string-append out "/include")))))
  1586. (delete 'configure)) ; no configure script
  1587. #:tests? #f ; no check target
  1588. #:make-flags '("CC=gcc" "sharedlib")))
  1589. (inputs
  1590. `(("bzip2" ,bzip2)
  1591. ("libjpeg" ,libjpeg)
  1592. ("libpng" ,libpng)
  1593. ("libx11" ,libx11)
  1594. ("libxxf86vm" ,libxxf86vm)
  1595. ("mesa" ,mesa)))
  1596. (synopsis "3D game engine written in C++")
  1597. (description
  1598. "The Irrlicht Engine is a high performance realtime 3D engine written in
  1599. C++. Features include an OpenGL renderer, extensible materials, scene graph
  1600. management, character animation, particle and other special effects, support
  1601. for common mesh file formats, and collision detection.")
  1602. (home-page "http://irrlicht.sourceforge.net/")
  1603. (license license:zlib)))
  1604. (define-public mars
  1605. ;; The latest release on SourceForge relies on an unreleased version of SFML
  1606. ;; with a different API, so we take the latest version from the official
  1607. ;; repository on Github.
  1608. (let ((commit "c855d044094a1d92317e38935d81ba938946132e")
  1609. (revision "1"))
  1610. (package
  1611. (name "mars")
  1612. (version (string-append "0.7.5." revision "." (string-take commit 7) ))
  1613. (source (origin
  1614. (method git-fetch)
  1615. (uri (git-reference
  1616. (url "https://github.com/thelaui/M.A.R.S..git")
  1617. (commit commit)))
  1618. (file-name (string-append name "-" version))
  1619. (sha256
  1620. (base32
  1621. "1r4c5gap1z2zsv4yjd34qriqkxaq4lb4rykapyzkkdf4g36lc3nh"))
  1622. (patches (search-patches "mars-sfml-2.3.patch"
  1623. "mars-install.patch"))))
  1624. (build-system cmake-build-system)
  1625. (arguments
  1626. `(#:tests? #f ; There are no tests
  1627. #:phases
  1628. (modify-phases %standard-phases
  1629. (add-after 'unpack 'fix-install-path
  1630. (lambda _
  1631. (substitute* "src/CMakeLists.txt"
  1632. (("\\$\\{CMAKE_INSTALL_PREFIX\\}/games")
  1633. "${CMAKE_INSTALL_PREFIX}/bin"))
  1634. #t))
  1635. (add-after 'unpack 'fix-data-path
  1636. (lambda* (#:key outputs #:allow-other-keys)
  1637. (substitute* "src/System/settings.cpp"
  1638. (("C_dataPath = \"./data/\";")
  1639. (string-append "C_dataPath = \""
  1640. (assoc-ref outputs "out")
  1641. "/share/games/marsshooter/\";")))
  1642. #t)))))
  1643. (inputs
  1644. `(("mesa" ,mesa)
  1645. ("fribidi" ,fribidi)
  1646. ("taglib" ,taglib)
  1647. ("sfml" ,sfml)))
  1648. (home-page "http://marsshooter.org")
  1649. (synopsis "2D space shooter")
  1650. (description
  1651. "M.A.R.S. is a 2D space shooter with pretty visual effects and
  1652. attractive physics. Players can battle each other or computer controlled
  1653. enemies in different game modes such as space ball, death match, team death
  1654. match, cannon keep, and grave-itation pit.")
  1655. (license license:gpl3+))))
  1656. (define minetest-data
  1657. (package
  1658. (name "minetest-data")
  1659. (version "0.4.17")
  1660. (source (origin
  1661. (method git-fetch)
  1662. (uri (git-reference
  1663. (url "https://github.com/minetest/minetest_game")
  1664. (commit version)))
  1665. (file-name (git-file-name name version))
  1666. (sha256
  1667. (base32
  1668. "1g8iw2pya32ifljbdx6z6rpcinmzm81i9minhi2bi1d500ailn7s"))))
  1669. (build-system trivial-build-system)
  1670. (native-inputs
  1671. `(("source" ,source)))
  1672. (arguments
  1673. `(#:modules ((guix build utils))
  1674. #:builder (begin
  1675. (use-modules (guix build utils))
  1676. (let ((install-dir (string-append
  1677. %output
  1678. "/share/minetest/games/minetest_game")))
  1679. (mkdir-p install-dir)
  1680. (copy-recursively
  1681. (assoc-ref %build-inputs "source")
  1682. install-dir)
  1683. #t))))
  1684. (synopsis "Main game data for the Minetest game engine")
  1685. (description
  1686. "Game data for the Minetest infinite-world block sandox game.")
  1687. (home-page "http://minetest.net")
  1688. (license license:lgpl2.1+)))
  1689. (define-public minetest
  1690. (package
  1691. (name "minetest")
  1692. (version "0.4.17.1")
  1693. (source (origin
  1694. (method git-fetch)
  1695. (uri (git-reference
  1696. (url "https://github.com/minetest/minetest")
  1697. (commit version)))
  1698. (file-name (git-file-name name version))
  1699. (sha256
  1700. (base32
  1701. "19sfblgh9mchkgw32n7gdvm7a8a9jxsl9cdlgmxn9bk9m939a2sg"))
  1702. (modules '((guix build utils)))
  1703. (snippet
  1704. '(begin
  1705. (delete-file-recursively "lib") #t))))
  1706. (build-system cmake-build-system)
  1707. (arguments
  1708. '(#:configure-flags
  1709. (list "-DRUN_IN_PLACE=0"
  1710. "-DENABLE_FREETYPE=1"
  1711. "-DENABLE_GETTEXT=1"
  1712. "-DENABLE_SYSTEM_JSONCPP=TRUE"
  1713. (string-append "-DIRRLICHT_INCLUDE_DIR="
  1714. (assoc-ref %build-inputs "irrlicht")
  1715. "/include/irrlicht")
  1716. (string-append "-DCURL_INCLUDE_DIR="
  1717. (assoc-ref %build-inputs "curl")
  1718. "/include/curl"))
  1719. #:tests? #f)) ; no check target
  1720. (native-search-paths
  1721. (list (search-path-specification
  1722. (variable "MINETEST_SUBGAME_PATH")
  1723. (files '("share/minetest/games")))))
  1724. (native-inputs
  1725. `(("pkg-config" ,pkg-config)))
  1726. (inputs
  1727. `(("curl" ,curl)
  1728. ("freetype" ,(@ (gnu packages fontutils) freetype))
  1729. ("gettext" ,gettext-minimal)
  1730. ("gmp" ,gmp)
  1731. ("irrlicht" ,irrlicht)
  1732. ("jsoncpp" ,jsoncpp)
  1733. ("libjpeg" ,libjpeg)
  1734. ("libpng" ,libpng)
  1735. ("libogg" ,libogg)
  1736. ("libvorbis" ,libvorbis)
  1737. ("libxxf86vm" ,libxxf86vm)
  1738. ("luajit" ,luajit)
  1739. ("mesa" ,mesa)
  1740. ("ncurses" ,ncurses)
  1741. ("openal" ,openal)
  1742. ("sqlite" ,sqlite)))
  1743. (propagated-inputs
  1744. `(("minetest-data" ,minetest-data)))
  1745. (synopsis "Infinite-world block sandbox game")
  1746. (description
  1747. "Minetest is a sandbox construction game. Players can create and destroy
  1748. various types of blocks in a three-dimensional open world. This allows
  1749. forming structures in every possible creation, on multiplayer servers or as a
  1750. single player. Mods and texture packs allow players to personalize the game
  1751. in different ways.")
  1752. (home-page "http://minetest.net")
  1753. (license license:lgpl2.1+)))
  1754. (define glkterm
  1755. (package
  1756. (name "glkterm")
  1757. (version "1.0.4")
  1758. (source
  1759. (origin
  1760. (method url-fetch)
  1761. (uri (string-append "http://www.ifarchive.org/if-archive/programming/"
  1762. "glk/implementations/glkterm-104.tar.gz"))
  1763. (sha256
  1764. (base32
  1765. "0zlj9nlnkdlvgbiliczinirqygiq8ikg5hzh5vgcmnpg9pvnwga7"))))
  1766. (build-system gnu-build-system)
  1767. (propagated-inputs `(("ncurses" ,ncurses))) ; required by Make.glkterm
  1768. (arguments
  1769. '(#:tests? #f ; no check target
  1770. #:phases
  1771. (modify-phases %standard-phases
  1772. (replace 'install
  1773. (lambda* (#:key outputs #:allow-other-keys)
  1774. (let* ((out (assoc-ref outputs "out"))
  1775. (inc (string-append out "/include"))
  1776. (lib (string-append out "/lib")))
  1777. (for-each
  1778. (lambda (file)
  1779. (install-file file inc))
  1780. '("glk.h" "glkstart.h" "gi_blorb.h" "gi_dispa.h" "Make.glkterm"))
  1781. (install-file "libglkterm.a" lib))
  1782. #t))
  1783. (delete 'configure)))) ; no configure script
  1784. (home-page "http://www.eblong.com/zarf/glk/")
  1785. (synopsis "Curses Implementation of the Glk API")
  1786. (description
  1787. "Glk defines a portable API for applications with text UIs. It was
  1788. primarily designed for interactive fiction, but it should be suitable for many
  1789. interactive text utilities, particularly those based on a command line.
  1790. This is an implementation of the Glk library which runs in a terminal window,
  1791. using the @code{curses.h} library for screen control.")
  1792. (license (license:fsf-free "file://README"))))
  1793. (define-public glulxe
  1794. (package
  1795. (name "glulxe")
  1796. (version "0.5.4")
  1797. (source
  1798. (origin
  1799. (method url-fetch)
  1800. (uri (string-append "http://www.ifarchive.org/if-archive/programming/"
  1801. "glulx/interpreters/glulxe/glulxe-054.tar.gz"))
  1802. (sha256
  1803. (base32
  1804. "0vipydg6ra90yf9b3ipgppwxyb2xdhcxwvirgjy0v20wlf56zhhz"))))
  1805. (build-system gnu-build-system)
  1806. (inputs `(("glk" ,glkterm)))
  1807. (arguments
  1808. '(#:tests? #f ; no check target
  1809. #:make-flags
  1810. (let* ((glk (assoc-ref %build-inputs "glk")))
  1811. (list (string-append "GLKINCLUDEDIR=" glk "/include")
  1812. (string-append "GLKLIBDIR=" glk "/lib")
  1813. (string-append "GLKMAKEFILE=" "Make.glkterm")))
  1814. #:phases
  1815. (modify-phases %standard-phases
  1816. (replace 'install
  1817. (lambda* (#:key outputs #:allow-other-keys)
  1818. (let* ((out (assoc-ref outputs "out"))
  1819. (bin (string-append out "/bin")))
  1820. (install-file "glulxe" bin))
  1821. #t))
  1822. (delete 'configure)))) ; no configure script
  1823. (home-page "http://www.eblong.com/zarf/glulx/")
  1824. (synopsis "Interpreter for Glulx VM")
  1825. (description
  1826. "Glulx is a 32-bit portable virtual machine intended for writing and
  1827. playing interactive fiction. It was designed by Andrew Plotkin to relieve
  1828. some of the restrictions in the venerable Z-machine format. This is the
  1829. reference interpreter, using the Glk API.")
  1830. (license license:expat)))
  1831. (define-public fizmo
  1832. (package
  1833. (name "fizmo")
  1834. (version "0.8.5")
  1835. (source (origin
  1836. (method url-fetch)
  1837. (uri (string-append "https://fizmo.spellbreaker.org/source/"
  1838. name "-" version ".tar.gz"))
  1839. (sha256
  1840. (base32
  1841. "1amyc4n41jf08kxmdgkk30bzzx54miaxa97w28f417qwn8lrl98w"))))
  1842. (build-system gnu-build-system)
  1843. (arguments
  1844. '(#:configure-flags
  1845. (let ((libjpeg (assoc-ref %build-inputs "libjpeg"))
  1846. (ncurses (assoc-ref %build-inputs "ncurses")))
  1847. (list (string-append "--with-jpeg-includedir=" libjpeg "/include")))))
  1848. (native-inputs
  1849. `(("pkg-config" ,pkg-config)))
  1850. (inputs
  1851. `(("freetype" ,freetype)
  1852. ("libjpeg" ,libjpeg)
  1853. ("libpng" ,libpng)
  1854. ("libsndfile" ,libsndfile)
  1855. ("libxml2" ,libxml2)
  1856. ("ncurses" ,ncurses)
  1857. ("sdl2" ,sdl2)))
  1858. (home-page "https://fizmo.spellbreaker.org/")
  1859. (synopsis "Z-machine interpreter")
  1860. (description
  1861. "Fizmo is a console-based Z-machine interpreter. It is used to play
  1862. interactive fiction, also known as text adventures, which were implemented
  1863. either by Infocom or created using the Inform compiler.")
  1864. (license license:bsd-3)))
  1865. (define-public gnugo
  1866. (package
  1867. (name "gnugo")
  1868. (version "3.8")
  1869. (source (origin
  1870. (method url-fetch)
  1871. (uri (string-append "mirror://gnu/gnugo/gnugo-" version
  1872. ".tar.gz"))
  1873. (sha256
  1874. (base32
  1875. "0wkahvqpzq6lzl5r49a4sd4p52frdmphnqsfdv7gdp24bykdfs6s"))))
  1876. (build-system gnu-build-system)
  1877. (inputs `(("readline" ,readline)))
  1878. (synopsis "Play the game of Go")
  1879. (description
  1880. "GNU Go is a program that plays the game of Go, in which players
  1881. place stones on a grid to form territory or capture other stones. While
  1882. it can be played directly from the terminal, rendered in ASCII characters,
  1883. it is also possible to play GNU Go with 3rd party graphical interfaces or
  1884. even in Emacs. It supports the standard game storage format (SGF, Smart
  1885. Game Format) and inter-process communication format (GMP, Go Modem
  1886. Protocol).")
  1887. (home-page "https://www.gnu.org/software/gnugo/")
  1888. (license license:gpl3+)))
  1889. (define-public extremetuxracer
  1890. (package
  1891. (name "extremetuxracer")
  1892. (version "0.7.5")
  1893. (source (origin
  1894. (method url-fetch)
  1895. (uri (string-append
  1896. "mirror://sourceforge/extremetuxracer/releases/"
  1897. version "/etr-" version ".tar.xz"))
  1898. (sha256
  1899. (base32
  1900. "1ly63316c07i0gyqqmyzsyvygsvygn0fpk3bnbg25fi6li99rlsg"))))
  1901. (build-system gnu-build-system)
  1902. (native-inputs
  1903. `(("pkg-config" ,pkg-config)))
  1904. (inputs
  1905. `(("glu" ,glu)
  1906. ("sfml" ,sfml)))
  1907. (synopsis "High-speed arctic racing game based on Tux Racer")
  1908. ;; Snarfed straight from Debian.
  1909. (description "Extreme Tux Racer, or etracer as it is called for short, is
  1910. a simple OpenGL racing game featuring Tux, the Linux mascot. The goal of the
  1911. game is to slide down a snow- and ice-covered mountain as quickly as possible,
  1912. avoiding the trees and rocks that will slow you down.
  1913. Collect herrings and other goodies while sliding down the hill, but avoid fish
  1914. bones.
  1915. This game is based on the GPL version of the famous game TuxRacer.")
  1916. (home-page "https://sourceforge.net/projects/extremetuxracer/")
  1917. (license license:gpl2+)))
  1918. (define-public supertuxkart
  1919. (package
  1920. (name "supertuxkart")
  1921. (version "0.9.3")
  1922. (source
  1923. (origin
  1924. (method url-fetch)
  1925. (uri (string-append "mirror://sourceforge/supertuxkart/SuperTuxKart/"
  1926. version "/supertuxkart-" version "-src.tar.xz"))
  1927. (sha256
  1928. (base32
  1929. "1c4w47ibj87lgwiqygq8qi7jiz6gklj4dwf5bs5zk15s0rqlw0fq"))
  1930. (modules '((guix build utils)))
  1931. (snippet
  1932. ;; Delete bundled library sources
  1933. '(begin
  1934. ;; FIXME: try to unbundle enet, and angelscript
  1935. (for-each delete-file-recursively
  1936. '("lib/zlib"
  1937. "lib/libpng"
  1938. "lib/jpeglib"
  1939. "lib/glew"
  1940. "lib/wiiuse"))
  1941. (substitute* "CMakeLists.txt"
  1942. ;; Supertuxkart uses modified versions of the Irrlicht engine
  1943. ;; and the bullet library. The developers gave an explanation here:
  1944. ;; http://forum.freegamedev.net/viewtopic.php?f=17&t=3906
  1945. (("add_subdirectory\\(.*/(glew|zlib)\"\\)") ""))
  1946. #t))))
  1947. (build-system cmake-build-system)
  1948. (arguments
  1949. `(#:tests? #f ; no check target
  1950. #:configure-flags
  1951. (list "-DUSE_WIIUSE=0"
  1952. ;; Do not use the bundled zlib
  1953. "-DNO_IRR_COMPILE_WITH_ZLIB_=TRUE"
  1954. ;; FIXME: needs libopenglrecorder
  1955. "-DBUILD_RECORDER=0"
  1956. ;; Irrlicht returns an integer instead of a boolean
  1957. "-DCMAKE_C_FLAGS=-fpermissive")
  1958. #:phases
  1959. (modify-phases %standard-phases
  1960. ;; see https://github.com/supertuxkart/stk-code/issues/3557
  1961. (add-after 'unpack 'patch-for-mesa-18.3
  1962. (lambda _
  1963. (substitute* "src/graphics/gl_headers.hpp"
  1964. (("#if !defined\\(USE_GLES2\\)")
  1965. "#if !defined(USE_GLES2)\n# define __gl_glext_h_"))
  1966. #t))
  1967. (add-after 'unpack 'unbundle
  1968. (lambda* (#:key inputs #:allow-other-keys)
  1969. (substitute* "CMakeLists.txt"
  1970. (("glew")
  1971. (string-append (assoc-ref inputs "glew")
  1972. "/lib/libGLEW.a"))
  1973. (("include_directories\\(\"\\$\\{PROJECT_SOURCE_DIR\\}/lib/glew/include\"\\)")
  1974. (string-append "include_directories(\""
  1975. (assoc-ref inputs "glew")
  1976. "/include\")")))
  1977. #t)))))
  1978. (inputs
  1979. `(("glew" ,glew)
  1980. ("zlib" ,zlib)
  1981. ("openal" ,openal)
  1982. ("libvorbis" ,libvorbis)
  1983. ("freetype" ,freetype)
  1984. ("fribidi" ,fribidi)
  1985. ("mesa" ,mesa)
  1986. ("libx11" ,libx11)
  1987. ("libxrandr" ,libxrandr)
  1988. ("curl" ,curl)
  1989. ;; The following input is needed to build the bundled and modified
  1990. ;; version of irrlicht.
  1991. ("libjpeg" ,libjpeg)))
  1992. (native-inputs
  1993. `(("pkg-config" ,pkg-config)))
  1994. (home-page "https://supertuxkart.net/")
  1995. (synopsis "3D kart racing game")
  1996. (description "SuperTuxKart is a 3D kart racing game, with a focus on
  1997. having fun over realism. You can play with up to 4 friends on one PC, racing
  1998. against each other or just trying to beat the computer; single-player mode is
  1999. also available.")
  2000. (license license:gpl3+)))
  2001. (define-public gnujump
  2002. (package
  2003. (name "gnujump")
  2004. (version "1.0.8")
  2005. (source (origin
  2006. (method url-fetch)
  2007. (uri (string-append "mirror://gnu/gnujump/gnujump-"
  2008. version ".tar.gz"))
  2009. (sha256
  2010. (base32
  2011. "05syy9mzbyqcfnm0hrswlmhwlwx54f0l6zhcaq8c1c0f8dgzxhqk"))))
  2012. (build-system gnu-build-system)
  2013. (arguments
  2014. '(#:phases
  2015. (modify-phases %standard-phases
  2016. (add-before
  2017. 'configure 'link-libm
  2018. (lambda _ (setenv "LIBS" "-lm"))))))
  2019. (inputs
  2020. `(("glu" ,glu)
  2021. ("mesa" ,mesa)
  2022. ("sdl" ,sdl)
  2023. ("sdl-image" ,sdl-image)
  2024. ("sdl-mixer" ,sdl-mixer)))
  2025. (home-page "http://gnujump.es.gnu.org/")
  2026. (synopsis
  2027. "Game of jumping to the next floor, trying not to fall")
  2028. (description
  2029. "GNUjump is a simple, yet addictive game in which you must jump from
  2030. platform to platform to avoid falling, while the platforms drop at faster rates
  2031. the higher you go. The game features multiplayer, unlimited FPS, smooth floor
  2032. falling, themeable graphics and sounds, and replays.")
  2033. (license license:gpl3+)))
  2034. (define-public wesnoth
  2035. (package
  2036. (name "wesnoth")
  2037. (version "1.14.5")
  2038. (source (origin
  2039. (method url-fetch)
  2040. (uri (string-append "mirror://sourceforge/wesnoth/wesnoth-"
  2041. (version-major+minor version) "/wesnoth-"
  2042. version "/"
  2043. name "-" version ".tar.bz2"))
  2044. (sha256
  2045. (base32
  2046. "1kgpj2f22nnx4mwd1zis3s5ny2983aasgqsmz7wnqaq7n6a7ac85"))
  2047. (patches (search-patches "wesnoth-newer-boost.patch"))))
  2048. (build-system cmake-build-system)
  2049. (arguments
  2050. `(#:tests? #f)) ; no check target
  2051. (native-inputs
  2052. `(("gettext" ,gettext-minimal)
  2053. ("pkg-config" ,pkg-config)))
  2054. (inputs
  2055. `(("boost" ,boost)
  2056. ("dbus" ,dbus)
  2057. ("fribidi" ,fribidi)
  2058. ("libvorbis" ,libvorbis)
  2059. ("openssl" ,openssl)
  2060. ("pango" ,pango)
  2061. ("sdl-union" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))))
  2062. (home-page "https://www.wesnoth.org/")
  2063. (synopsis "Turn-based strategy game")
  2064. (description
  2065. "The Battle for Wesnoth is a fantasy, turn based tactical strategy game,
  2066. with several single player campaigns, and multiplayer games (both networked and
  2067. local).
  2068. Battle for control on a range of maps, using variety of units which have
  2069. advantages and disadvantages against different types of attacks. Units gain
  2070. experience and advance levels, and are carried over from one scenario to the
  2071. next campaign.")
  2072. (license license:gpl2+)))
  2073. (define-public wesnoth-server
  2074. (package
  2075. (inherit wesnoth)
  2076. (name "wesnoth-server")
  2077. (inputs
  2078. `(("boost" ,boost)
  2079. ("icu4c" ,icu4c)
  2080. ("openssl" ,openssl)
  2081. ("sdl2" ,sdl2)))
  2082. (arguments
  2083. `(#:configure-flags '("-DENABLE_GAME=OFF")
  2084. ,@(package-arguments wesnoth)))
  2085. (synopsis "Dedicated @emph{Battle for Wesnoth} server")
  2086. (description "This package contains a dedicated server for @emph{The
  2087. Battle for Wesnoth}.")))
  2088. (define-public gamine
  2089. (package
  2090. (name "gamine")
  2091. (version "1.6")
  2092. (source (origin
  2093. (method url-fetch)
  2094. (uri (string-append "mirror://sourceforge/gamine-game/"
  2095. "gamine-" version ".tar.gz"))
  2096. (sha256
  2097. (base32
  2098. "1sc6f4445ciigd6yw0ri92746k4hk6ps0bvj9fm1gbp3c3fslk5n"))))
  2099. (build-system gnu-build-system)
  2100. (native-inputs
  2101. `(("pkg-config" ,pkg-config)
  2102. ("intltool" ,intltool)))
  2103. (inputs
  2104. `(("gstreamer" ,gstreamer)
  2105. ("gst-plugins-base" ,gst-plugins-base) ; playbin plugin
  2106. ("gst-plugins-good" ,gst-plugins-good) ; for wav playback
  2107. ("gtk+" ,gtk+)))
  2108. (arguments
  2109. `(#:tests? #f
  2110. #:make-flags
  2111. (let ((out (assoc-ref %outputs "out")))
  2112. (list (string-append "PREFIX=" out)
  2113. (string-append "SYSCONFDIR=" out "/etc")))
  2114. #:phases
  2115. (modify-phases %standard-phases
  2116. (delete 'configure)
  2117. (add-after
  2118. 'install 'wrap-gamine
  2119. (lambda* (#:key outputs #:allow-other-keys)
  2120. (let ((out (assoc-ref outputs "out"))
  2121. (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH")))
  2122. (wrap-program (string-append out "/bin/gamine")
  2123. `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))))
  2124. #t)))))
  2125. (home-page "http://gamine-game.sourceforge.net/")
  2126. (synopsis "Mouse and keyboard discovery for children")
  2127. (description
  2128. "Gamine is a game designed for young children who are learning to use the
  2129. mouse and keyboard. The child uses the mouse to draw colored dots and lines
  2130. on the screen and keyboard to display letters.")
  2131. ;; Most files under gpl2+ or gpl3+, but eat.wav under gpl3
  2132. (license license:gpl3)))
  2133. (define-public raincat
  2134. (package
  2135. (name "raincat")
  2136. (version "1.2.1")
  2137. (source
  2138. (origin
  2139. (method url-fetch)
  2140. (uri (string-append "http://hackage.haskell.org/package/Raincat/"
  2141. "Raincat-" version ".tar.gz"))
  2142. (sha256
  2143. (base32
  2144. "10y9zi22m6hf13c9h8zd9vg7mljpwbw0r3djb6r80bna701fdf6c"))))
  2145. (build-system haskell-build-system)
  2146. (arguments
  2147. `(#:phases
  2148. (modify-phases %standard-phases
  2149. (add-after 'install 'wrap-executable
  2150. (lambda* (#:key inputs outputs #:allow-other-keys)
  2151. (let ((out (assoc-ref outputs "out")))
  2152. (wrap-program (string-append out "/bin/raincat")
  2153. `("LD_LIBRARY_PATH" ":" =
  2154. (,(string-append (assoc-ref inputs "freeglut")
  2155. "/lib"))))
  2156. #t))))))
  2157. (inputs
  2158. `(("ghc-extensible-exceptions" ,ghc-extensible-exceptions)
  2159. ("ghc-random" ,ghc-random)
  2160. ("ghc-glut" ,ghc-glut)
  2161. ("freeglut" ,freeglut)
  2162. ("ghc-opengl" ,ghc-opengl)
  2163. ("ghc-sdl2" ,ghc-sdl2)
  2164. ("ghc-sdl2-image" ,ghc-sdl2-image)
  2165. ("ghc-sdl2-mixer" ,ghc-sdl2-mixer)))
  2166. (home-page "http://www.bysusanlin.com/raincat/")
  2167. (synopsis "Puzzle game with a cat in lead role")
  2168. (description "Project Raincat is a game developed by Carnegie Mellon
  2169. students through GCS during the Fall 2008 semester. Raincat features game
  2170. play inspired from classics Lemmings and The Incredible Machine. The project
  2171. proved to be an excellent learning experience for the programmers. Everything
  2172. is programmed in Haskell.")
  2173. (license license:bsd-3)))
  2174. (define-public manaplus
  2175. (package
  2176. (name "manaplus")
  2177. (version "1.7.6.10")
  2178. (source (origin
  2179. (method url-fetch)
  2180. (uri (string-append
  2181. "http://repo.manaplus.org/manaplus/download/"
  2182. version "/manaplus-" version ".tar.xz"))
  2183. (sha256
  2184. (base32
  2185. "0l7swvpzq20am4w2rsjpp6fsvbjv07il6wbfy45a7h9zsdihmqhl"))))
  2186. (build-system gnu-build-system)
  2187. (arguments
  2188. '(#:configure-flags
  2189. (list (string-append "CPPFLAGS=-I"
  2190. (assoc-ref %build-inputs "sdl-union")
  2191. "/include/SDL"))))
  2192. (native-inputs
  2193. `(("pkg-config" ,pkg-config)))
  2194. (inputs
  2195. `(("glu" ,glu)
  2196. ("curl" ,curl)
  2197. ("libxml2" ,libxml2)
  2198. ("mesa" ,mesa)
  2199. ("sdl-union" ,(sdl-union))))
  2200. (home-page "http://manaplus.org")
  2201. (synopsis "Client for 'The Mana World' and similar games")
  2202. (description
  2203. "ManaPlus is a 2D MMORPG client for game servers. It is the only
  2204. fully supported client for @uref{http://www.themanaworld.org, The mana
  2205. world}, @uref{http://evolonline.org, Evol Online} and
  2206. @uref{http://landoffire.org, Land of fire}.")
  2207. ;; "src/debug/*" and "src/sdl2gfx/*" are under Zlib.
  2208. ;; "data/themes/{golden-delicious,jewelry}/*" are under CC-BY-SA.
  2209. ;; The rest is under GPL2+.
  2210. (license (list license:gpl2+ license:zlib license:cc-by-sa4.0))))
  2211. (define openttd-engine
  2212. (package
  2213. (name "openttd-engine")
  2214. (version "1.8.0")
  2215. (source
  2216. (origin (method url-fetch)
  2217. (uri (string-append "http://binaries.openttd.org/releases/"
  2218. version "/openttd-" version "-source.tar.xz"))
  2219. (patches
  2220. (list
  2221. (origin (method url-fetch)
  2222. (uri (string-append
  2223. "https://github.com/OpenTTD/OpenTTD/commit/"
  2224. "19076c24c1f3baf2a22d1fa832d5688216cf54a3.patch"))
  2225. (file-name "openttd-fix-compilation-with-ICU-61.patch")
  2226. (sha256
  2227. (base32
  2228. "02d1xmb75yv4x6rfnvxk3vvq4l3lvvwr2pfsdzn7lzalic51ziqh")))))
  2229. (sha256
  2230. (base32
  2231. "0zq8xdg0k92p3s4j9x76591zaqz7k9ra69q008m209vdfffjvly2"))
  2232. (modules '((guix build utils)))
  2233. (snippet
  2234. ;; The DOS port contains proprietary software.
  2235. '(begin
  2236. (delete-file-recursively "os/dos")
  2237. #t))))
  2238. (build-system gnu-build-system)
  2239. (arguments
  2240. `(#:tests? #f ; no "check" target
  2241. #:phases
  2242. (modify-phases %standard-phases
  2243. ;; The build process fails if the configure script is passed the
  2244. ;; option "--enable-fast-install".
  2245. (replace 'configure
  2246. (lambda* (#:key inputs outputs (configure-flags '())
  2247. #:allow-other-keys)
  2248. (let ((out (assoc-ref outputs "out"))
  2249. (lzo (assoc-ref inputs "lzo")))
  2250. (apply invoke "./configure"
  2251. (string-append "--prefix=" out)
  2252. ;; Provide the "lzo" path.
  2253. (string-append "--with-liblzo2="
  2254. lzo "/lib/liblzo2.a")
  2255. ;; Put the binary in 'bin' instead of 'games'.
  2256. "--binary-dir=bin"
  2257. configure-flags)))))))
  2258. (native-inputs `(("pkg-config" ,pkg-config)))
  2259. (inputs
  2260. `(("allegro" ,allegro)
  2261. ("fontconfig" ,fontconfig)
  2262. ("freetype" ,freetype)
  2263. ("icu4c" ,icu4c)
  2264. ("libpng" ,libpng)
  2265. ("lzo" ,lzo)
  2266. ("sdl" ,sdl)
  2267. ("xz" ,xz)
  2268. ("zlib" ,zlib)))
  2269. (synopsis "Transportation economics simulator")
  2270. (description "OpenTTD is a game in which you transport goods and
  2271. passengers by land, water and air. It is a re-implementation of Transport
  2272. Tycoon Deluxe with many enhancements including multiplayer mode,
  2273. internationalization support, conditional orders and the ability to clone,
  2274. autoreplace and autoupdate vehicles. This package only includes the game
  2275. engine. When you start it you will be prompted to download a graphics set.")
  2276. (home-page "http://openttd.org/")
  2277. ;; This package is GPLv2, except for a few files located in
  2278. ;; "src/3rdparty/" which are under the 3-clause BSD, LGPLv2.1+ and Zlib
  2279. ;; licenses. In addition, this software contains an in-game downloader
  2280. ;; from which the user may find non-functional data licensed under
  2281. ;; different terms.
  2282. (license (list license:bsd-3 license:gpl2 license:lgpl2.1+ license:zlib))))
  2283. (define openttd-opengfx
  2284. (package
  2285. (name "openttd-opengfx")
  2286. (version "0.5.2")
  2287. (source
  2288. (origin
  2289. (method url-fetch)
  2290. (uri (string-append "http://binaries.openttd.org/extra/opengfx/"
  2291. version "/opengfx-" version "-source.tar.xz"))
  2292. (sha256
  2293. (base32
  2294. "0iz66q7p1mf00njfjbc4vibh3jaybki7armkl18iz7p6x4chp9zv"))))
  2295. (build-system gnu-build-system)
  2296. (arguments
  2297. '(#:make-flags (list "CC=gcc"
  2298. (string-append "INSTALL_DIR="
  2299. (assoc-ref %outputs "out")
  2300. "/share/games/openttd/baseset/opengfx"))
  2301. #:phases
  2302. (modify-phases %standard-phases
  2303. (replace 'configure
  2304. (lambda _
  2305. ;; Make sure HOME is writable for GIMP.
  2306. (setenv "HOME" (getcwd))
  2307. ;; Redirect stdout, not stderr, to /dev/null. This prevents
  2308. ;; dos2unix from receiving its version information as a flag.
  2309. (substitute* "Makefile"
  2310. (("\\$\\(UNIX2DOS\\) -q --version 2>/dev/null")
  2311. "$(UNIX2DOS) -q --version 1>/dev/null")))))
  2312. ;; The check phase for this package only checks the md5sums of the built
  2313. ;; GRF files against the md5sums of the release versions. Because we use
  2314. ;; different software versions than upstream does, some of the md5sums
  2315. ;; are different. However, the package is still reproducible, it's safe
  2316. ;; to disable this test.
  2317. #:tests? #f
  2318. #:parallel-build? #f))
  2319. (native-inputs `(("dos2unix" ,dos2unix)
  2320. ("gimp" ,gimp)
  2321. ("grfcodec" ,grfcodec)
  2322. ("nml" ,nml)
  2323. ("python" ,python-2)))
  2324. (home-page "http://dev.openttdcoop.org/projects/opengfx")
  2325. (synopsis "Base graphics set for OpenTTD")
  2326. (description
  2327. "The OpenGFX projects is an implementation of the OpenTTD base grahics
  2328. set that aims to ensure the best possible out-of-the-box experience.
  2329. OpenGFX provides you with...
  2330. @enumerate
  2331. @item All graphics you need to enjoy OpenTTD.
  2332. @item Uniquely drawn rail vehicles for every climate.
  2333. @item Completely snow-aware rivers.
  2334. @item Different river and sea water.
  2335. @item Snow-aware buoys.
  2336. @end enumerate")
  2337. (license license:gpl2)))
  2338. (define openttd-opensfx
  2339. (package
  2340. (name "openttd-opensfx")
  2341. (version "0.2.3")
  2342. (source
  2343. (origin
  2344. (method url-fetch)
  2345. (uri (string-append
  2346. "https://binaries.openttd.org/extra/opensfx/"
  2347. version "/opensfx-" version "-source.tar.gz"))
  2348. (sha256
  2349. (base32
  2350. "03jxgp02ks31hmsdh4xh0xcpkb70ds8jakc9pfc1y9vdrdavh4p5"))))
  2351. (build-system gnu-build-system)
  2352. (native-inputs
  2353. `(("catcodec" ,catcodec)
  2354. ("python" ,python-2)))
  2355. (arguments
  2356. `(#:make-flags
  2357. (list (string-append "INSTALL_DIR=" %output
  2358. "/share/games/openttd/baseset/opensfx"))
  2359. #:phases
  2360. (modify-phases %standard-phases
  2361. (add-after 'unpack 'make-reproducible
  2362. (lambda _
  2363. ;; Remove the time dependency of the installed tarball by setting
  2364. ;; the modification times if its members to 0.
  2365. (substitute* "scripts/Makefile.def"
  2366. (("-cf") " --mtime=@0 -cf"))
  2367. #t))
  2368. (delete 'configure))))
  2369. (home-page "http://dev.openttdcoop.org/projects/opensfx")
  2370. (synopsis "Base sounds for OpenTTD")
  2371. (description "OpenSFX is a set of free base sounds for OpenTTD which make
  2372. it possible to play OpenTTD without requiring the proprietary sound files from
  2373. the original Transport Tycoon Deluxe.")
  2374. (license license:cc-sampling-plus-1.0)))
  2375. (define openttd-openmsx
  2376. (package
  2377. (name "openttd-openmsx")
  2378. (version "0.3.1")
  2379. (source
  2380. (origin
  2381. (method url-fetch)
  2382. (uri (string-append
  2383. "https://binaries.openttd.org/extra/openmsx/"
  2384. version "/openmsx-" version "-source.tar.gz"))
  2385. (sha256
  2386. (base32
  2387. "0nskq97a6fsv1v6d62zf3yb8whzhqnlh3lap3va3nzvj7csjgf7c"))))
  2388. (build-system gnu-build-system)
  2389. (native-inputs
  2390. `(("python" ,python-2)))
  2391. (arguments
  2392. `(#:make-flags
  2393. (list (string-append "INSTALL_DIR=" %output
  2394. "/share/games/openttd/baseset"))
  2395. #:phases
  2396. (modify-phases %standard-phases
  2397. (delete 'configure)
  2398. (add-after 'install 'post-install
  2399. ;; Rename openmsx-version to openmsx
  2400. (lambda* (#:key outputs #:allow-other-keys)
  2401. (let ((install-directory (string-append (assoc-ref outputs "out")
  2402. "/share/games/openttd/baseset")))
  2403. (rename-file (string-append install-directory "/openmsx-" ,version)
  2404. (string-append install-directory "/openmsx"))
  2405. #t))))))
  2406. (home-page "http://dev.openttdcoop.org/projects/openmsx")
  2407. (synopsis "Music set for OpenTTD")
  2408. (description "OpenMSX is a music set for OpenTTD which makes it possible
  2409. to play OpenTTD without requiring the proprietary music from the original
  2410. Transport Tycoon Deluxe.")
  2411. (license license:gpl2)))
  2412. (define-public openttd
  2413. (package
  2414. (inherit openttd-engine)
  2415. (name "openttd")
  2416. (arguments
  2417. `(#:configure-flags
  2418. (list (string-append "--with-midi=" (assoc-ref %build-inputs "timidity++")
  2419. "/bin/timidity"))
  2420. ,@(substitute-keyword-arguments (package-arguments openttd-engine)
  2421. ((#:phases phases)
  2422. `(modify-phases ,phases
  2423. (add-after 'install 'install-data
  2424. (lambda* (#:key inputs outputs #:allow-other-keys)
  2425. (for-each
  2426. (lambda (input)
  2427. (copy-recursively (assoc-ref inputs input)
  2428. (assoc-ref outputs "out")))
  2429. (list "opengfx" "openmsx" "opensfx"))
  2430. #t)))))))
  2431. (inputs
  2432. `(("timidity++" ,timidity++)
  2433. ,@(package-inputs openttd-engine)))
  2434. (native-inputs
  2435. `(("opengfx" ,openttd-opengfx)
  2436. ("openmsx" ,openttd-openmsx)
  2437. ("opensfx" ,openttd-opensfx)
  2438. ,@(package-native-inputs openttd-engine)))))
  2439. (define openrct2-title-sequences
  2440. (package
  2441. (name "openrct2-title-sequences")
  2442. (version "0.1.2")
  2443. (source
  2444. (origin
  2445. (method url-fetch)
  2446. (uri (string-append "https://github.com/OpenRCT2/title-sequences/releases/download/v"
  2447. version "/title-sequence-v" version ".zip"))
  2448. (file-name (string-append name "-" version ".zip"))
  2449. (sha256
  2450. (base32
  2451. "0qbyxrsw8hlgaq0r5d7lx7an3idy4qbfv7yiw9byhldk763n9cfw"))))
  2452. (build-system trivial-build-system)
  2453. (native-inputs
  2454. `(("bash" ,bash)
  2455. ("coreutils" ,coreutils)
  2456. ("unzip" ,unzip)))
  2457. (arguments
  2458. `(#:modules ((guix build utils))
  2459. #:builder
  2460. (begin
  2461. (use-modules (guix build utils))
  2462. (let* ((out (assoc-ref %outputs "out"))
  2463. (openrct2-title-sequences (string-append out
  2464. "/share/openrct2/title-sequences"))
  2465. (source (assoc-ref %build-inputs "source"))
  2466. (unzip (string-append (assoc-ref %build-inputs "unzip") "/bin/unzip")))
  2467. (copy-file source (string-append ,name "-" ,version ".zip"))
  2468. (invoke unzip (string-append ,name "-" ,version ".zip"))
  2469. (delete-file (string-append ,name "-" ,version ".zip"))
  2470. (mkdir-p openrct2-title-sequences)
  2471. (copy-recursively "."
  2472. openrct2-title-sequences)
  2473. #t))))
  2474. (home-page "https://github.com/OpenRCT2/OpenRCT2")
  2475. (synopsis "Title sequences for OpenRCT2")
  2476. (description
  2477. "openrct2-title-sequences is a set of title sequences for OpenRCT2.")
  2478. (license license:gpl3+)))
  2479. (define openrct2-objects
  2480. (package
  2481. (name "openrct2-objects")
  2482. (version "1.0.6")
  2483. (source
  2484. (origin
  2485. (method url-fetch)
  2486. (uri (string-append "https://github.com/OpenRCT2/objects/releases/download/v"
  2487. version "/objects.zip"))
  2488. (file-name (string-append name "-" version ".zip"))
  2489. (sha256
  2490. (base32
  2491. "00kfy95zx6g4ldr6br5p7bwkwfx6pw9v78fd3rvghjnwyvf5fhki"))))
  2492. (build-system trivial-build-system)
  2493. (native-inputs
  2494. `(("bash" ,bash)
  2495. ("coreutils" ,coreutils)
  2496. ("unzip" ,unzip)))
  2497. (arguments
  2498. `(#:modules ((guix build utils))
  2499. #:builder
  2500. (begin
  2501. (use-modules (guix build utils))
  2502. (let* ((out (assoc-ref %outputs "out"))
  2503. (openrct2-objects (string-append out
  2504. "/share/openrct2/objects"))
  2505. (source (assoc-ref %build-inputs "source"))
  2506. (unzip (string-append (assoc-ref %build-inputs "unzip") "/bin/unzip")))
  2507. (copy-file source (string-append ,name "-" ,version ".zip"))
  2508. (invoke unzip (string-append ,name "-" ,version ".zip"))
  2509. (delete-file (string-append ,name "-" ,version ".zip"))
  2510. (mkdir-p openrct2-objects)
  2511. (copy-recursively "."
  2512. openrct2-objects)
  2513. #t))))
  2514. (home-page "https://github.com/OpenRCT2/OpenRCT2")
  2515. (synopsis "Objects for OpenRCT2")
  2516. (description
  2517. "openrct2-objects is a set of objects for OpenRCT2.")
  2518. (license license:gpl3+)))
  2519. (define-public openrct2
  2520. (package
  2521. (name "openrct2")
  2522. (version "0.2.1")
  2523. (source
  2524. (origin
  2525. (method url-fetch)
  2526. (uri (string-append "https://github.com/OpenRCT2/OpenRCT2/archive/v"
  2527. version ".tar.gz"))
  2528. (sha256
  2529. (base32
  2530. "1fxzk037xphpyk7vv5jfrcz739zrj86p43pnf5gjjv9rjxwv7m8f"))
  2531. (file-name (string-append name "-" version ".tar.gz"))))
  2532. (build-system cmake-build-system)
  2533. (arguments
  2534. `(#:configure-flags (list "-DDOWNLOAD_OBJECTS=OFF"
  2535. "-DDOWNLOAD_TITLE_SEQUENCES=OFF")
  2536. #:tests? #f ; Tests require network.
  2537. #:phases
  2538. (modify-phases %standard-phases
  2539. (add-after 'unpack 'fix-usr-share-paths&add-data
  2540. (lambda* (#:key inputs outputs #:allow-other-keys)
  2541. (let ((titles (assoc-ref inputs "openrct2-title-sequences"))
  2542. (objects (assoc-ref inputs "openrct2-objects")))
  2543. ;; Fix some references to /usr/share.
  2544. (substitute* "src/openrct2/platform/Platform.Linux.cpp"
  2545. (("/usr/share")
  2546. (string-append (assoc-ref %outputs "out") "/share")))
  2547. (copy-recursively (string-append titles
  2548. "/share/openrct2/title-sequences") "data/title")
  2549. (copy-recursively (string-append objects
  2550. "/share/openrct2/objects") "data/object"))))
  2551. (add-before 'configure 'fixgcc7
  2552. (lambda _
  2553. (unsetenv "C_INCLUDE_PATH")
  2554. (unsetenv "CPLUS_INCLUDE_PATH")
  2555. #t))
  2556. (add-after 'fixgcc7 'get-rid-of-errors
  2557. (lambda _
  2558. ;; Don't treat warnings as errors.
  2559. (substitute* "CMakeLists.txt"
  2560. (("-Werror") "")))))))
  2561. (inputs `(("curl" ,curl)
  2562. ("fontconfig" ,fontconfig)
  2563. ("freetype" ,freetype)
  2564. ("icu4c" ,icu4c)
  2565. ("jansson" ,jansson)
  2566. ("libpng" ,libpng)
  2567. ("libzip" ,libzip)
  2568. ("mesa" ,mesa)
  2569. ("openrct2-objects" ,openrct2-objects)
  2570. ("openrct2-title-sequences" ,openrct2-title-sequences)
  2571. ("openssl" ,openssl)
  2572. ("sdl2" ,sdl2)
  2573. ("speexdsp" ,speexdsp)
  2574. ("zlib" ,zlib)))
  2575. (native-inputs
  2576. `(("gcc" ,gcc-7)
  2577. ("pkg-config" ,pkg-config)))
  2578. (home-page "https://github.com/OpenRCT2/OpenRCT2")
  2579. (synopsis "Free software re-implementation of RollerCoaster Tycoon 2")
  2580. (description "OpenRCT2 is a free software re-implementation of
  2581. RollerCoaster Tycoon 2 (RCT2). The gameplay revolves around building and
  2582. maintaining an amusement park containing attractions, shops and facilities.
  2583. Note that this package does @emph{not} provide the game assets (sounds,
  2584. images, etc.)")
  2585. ;; See <https://github.com/OpenRCT2/OpenRCT2/wiki/Required-RCT2-files>
  2586. ;; regarding assets.
  2587. (license license:gpl3+)))
  2588. (define-public pinball
  2589. (package
  2590. (name "pinball")
  2591. (version "0.3.1")
  2592. (source
  2593. (origin (method url-fetch)
  2594. (uri (string-append "mirror://sourceforge/pinball/pinball/"
  2595. "pinball-" version "/"
  2596. "pinball-" version ".tar.gz"))
  2597. (sha256
  2598. (base32
  2599. "1f2whlrfidwfh8lvr8cspcyirc6840r5d1ajm7x99qmngygrhixs"))
  2600. (patches (search-patches "pinball-const-fix.patch"
  2601. "pinball-cstddef.patch"
  2602. "pinball-missing-separators.patch"
  2603. "pinball-src-deps.patch"
  2604. "pinball-system-ltdl.patch"))))
  2605. (build-system gnu-build-system)
  2606. (inputs
  2607. `(("glu" ,glu)
  2608. ("mesa" ,mesa)
  2609. ("sdl" ,sdl)
  2610. ("sdl-image" ,sdl-image)
  2611. ("sdl-mixer" ,sdl-mixer)))
  2612. (arguments
  2613. '(#:configure-flags
  2614. (list (string-append "CPPFLAGS=-I"
  2615. (assoc-ref %build-inputs "sdl-image")
  2616. "/include/SDL -I"
  2617. (assoc-ref %build-inputs "sdl-mixer")
  2618. "/include/SDL"))))
  2619. (home-page "http://pinball.sourceforge.net")
  2620. (synopsis "Pinball simulator")
  2621. (description "The Emilia Pinball Project is a pinball simulator. There
  2622. are only two levels to play with, but they are very addictive.")
  2623. (license license:gpl2)))
  2624. (define-public pioneers
  2625. (package
  2626. (name "pioneers")
  2627. (version "15.5")
  2628. (source (origin
  2629. (method url-fetch)
  2630. (uri (string-append "http://downloads.sourceforge.net/pio/"
  2631. "pioneers-" version ".tar.gz"))
  2632. (sha256
  2633. (base32
  2634. "037gdiiw690jw3wd1s9lxmkqx0caxyk0b4drpm7i9p28gig43q9y"))))
  2635. (build-system gnu-build-system)
  2636. (inputs `(("avahi" ,avahi)
  2637. ("gtk+" ,gtk+)
  2638. ("librsvg" ,librsvg)))
  2639. (native-inputs `(("intltool" ,intltool)
  2640. ("itstool" ,itstool)
  2641. ("libxml2" ,libxml2)
  2642. ("pkg-config" ,pkg-config)))
  2643. (synopsis "Board game inspired by The Settlers of Catan")
  2644. (description "Pioneers is an emulation of the board game The Settlers of
  2645. Catan. It can be played on a local network, on the internet, and with AI
  2646. players.")
  2647. (home-page "http://pio.sourceforge.net/")
  2648. (license license:gpl2+)))
  2649. (define-public einstein
  2650. (package
  2651. (name "einstein")
  2652. (version "2.0")
  2653. (source (origin
  2654. (method url-fetch)
  2655. (uri (string-append "http://http.debian.net/debian/pool/main/e/"
  2656. "einstein/einstein_2.0.dfsg.2.orig.tar.gz"))
  2657. (sha256
  2658. (base32
  2659. "1hxrlv6n8py48j487i6wbb4n4vd55w0na69r7ccmmr9vmrsw5mlk"))
  2660. (patches (search-patches "einstein-build.patch"))))
  2661. (build-system gnu-build-system)
  2662. (inputs
  2663. `(("freetype" ,freetype)
  2664. ("sdl" ,(sdl-union (list sdl sdl-mixer sdl-ttf)))
  2665. ("zlib" ,zlib)))
  2666. (native-inputs
  2667. `(("font-dejavu" ,font-dejavu)))
  2668. (arguments
  2669. `(#:tests? #f ; no check target
  2670. #:phases
  2671. (modify-phases %standard-phases
  2672. (replace 'configure
  2673. (lambda* (#:key outputs inputs #:allow-other-keys)
  2674. (let ((out (assoc-ref outputs "out"))
  2675. (dejavu (string-append (assoc-ref inputs "font-dejavu")
  2676. "/share/fonts/truetype/DejaVuSans.ttf")))
  2677. (substitute* "Makefile"
  2678. (("PREFIX=/usr/local") (string-append "PREFIX=" out)))
  2679. ;; The patch above registers a free font for use by the binary,
  2680. ;; but the font is copied during the compile phase into a
  2681. ;; resources file, so we need to make the ttf file available.
  2682. (symlink dejavu "res/DejaVuSans.ttf")
  2683. #t))))))
  2684. (synopsis "Logic puzzle game")
  2685. (description "The goal of this logic game is to open all cards in a 6x6
  2686. grid, using a number of hints as to their relative position. The game idea
  2687. is attributed to Albert Einstein.")
  2688. ;; The original home page has disappeared.
  2689. (home-page (string-append "http://web.archive.org/web/20120521062745/"
  2690. "http://games.flowix.com/en/index.html"))
  2691. ;; License according to
  2692. ;; http://web.archive.org/web/20150222180355/http://www.babichev.info/en/projects/index.html
  2693. ;; The source code is a DFSG-sanitized tarball and does not contain any
  2694. ;; license information.
  2695. (license license:gpl3+)))
  2696. (define-public powwow
  2697. (package
  2698. (name "powwow")
  2699. (version "1.2.18")
  2700. (source (origin
  2701. (method url-fetch)
  2702. (uri (string-append
  2703. "https://www.hoopajoo.net/static/projects/powwow-"
  2704. version ".tar.gz"))
  2705. (file-name (string-append name "-" version ".tar.gz"))
  2706. (sha256
  2707. (base32
  2708. "1gf0jc1vfv05lxij51n3c1dqn3aiiy2kj1v6q14an3wm7yl7cllp"))))
  2709. (inputs
  2710. `(("ncurses" ,ncurses)))
  2711. (build-system gnu-build-system)
  2712. (home-page "https://www.hoopajoo.net/projects/powwow.html")
  2713. (synopsis "MUD and telnet client")
  2714. (description
  2715. "POWWOW is a client software which can be used for telnet as well as for
  2716. @dfn{Multi-User Dungeon} (MUD). Additionally it can serve as a nice client for
  2717. the chat server psyced with the specific config located at
  2718. http://lavachat.symlynx.com/unix/")
  2719. (license license:gpl2+)))
  2720. (define-public red-eclipse
  2721. (let ((release "1.6.0")
  2722. (revision 0)
  2723. (data-sources
  2724. '(("acerspyro" "07mzgdahnr3w3w7kf8nmy20r199rimfx9ryqxjdr793sw0vawqd3")
  2725. ("actors" "1hkgscfhg0kmwgym0mw56fhcckzbb2hh3nsvd45v4mdfyk0xnrm7")
  2726. ("appleflap" "1q4xs3x904mrrbxzv6lpr3lywm8p6i8339ijzy9j091s2wdl51ka")
  2727. ("blendbrush" "004md2haysr9w8fj6l7bj9wcfjqrq9wx1rrjf9dv16k5sbrkqza9")
  2728. ("caustics" "1qmmv8ds70j1ixy4rvli309vbcyjq1l5j1wri6nbnjay10f9fcgq")
  2729. ("crosshairs" "0q1vadg5cai9i6igl6y08774fd05gav0kinbgb2757n47ig50bns")
  2730. ("dziq" "1s9248ky2qqy24z9c2vgpisz500dvsaj249pv1fkrxgsypjm1z6v")
  2731. ("elyvisions" "15synpms05996v4c4kdl0h899spl4z7si9kl8c4m7rvc2yvin1ga")
  2732. ("fonts" "1l4727ai8mphi7n3wcjp2lh3p47nh6w82s5dpqbbjpqr9gilb69j")
  2733. ("freezurbern" "0hcdbzs02mvpsfhmahhqjv6pd8lbsag1bm6rpy61ns5qwmhg96ys")
  2734. ("john" "1whyvlx87mb83kfb7jhhnwz9s7lry4li8l3xar61vmlqgmsnz33d")
  2735. ("jojo" "02wxa93f5al4rlnsdjpd0hlnca0ympnj8481lgdxx70hny8zi3qi")
  2736. ("jwin" "1gb4l7lbhr150hml1y0wbyx7266q5nslh6n494wwrrsvp11s2qk8")
  2737. ("luckystrike" "0wy2spvhx5k233fsl283250ym5bqvkk8i6i19sw3zvzyxp2p4yq9")
  2738. ("maps" "1dmvp9mskval606z5srjd909jpm6qz4fdcpaszkkhfr5ajbj30vq")
  2739. ("mayhem" "0hkzzx0rxda70ixw9lfh9v1dpsbn2dj86jrr3zxjgasbgaxw37ax")
  2740. ("mikeplus64" "144fxhp4qjqjw3gvhf7ym6rnfxvxc0zvd3f54jg1jgnccc1hfyah")
  2741. ("misc" "0bpvibyc6vjhbzsf67xxn85yq2h97xs96icbskwzs2wsd860kq8c")
  2742. ("nieb" "0d72wsibk9sg9nhin3fwzz9zljiccyln0fn42y2q2xbd4my23b1k")
  2743. ("nobiax" "19lr36ys98cmpp739svjar1j942fbxz6r062gi7ygh89zh9yrgfy")
  2744. ("particles" "02pnq8ksl7f6kqxss3aza98jssdq2s41rhkhki71ynavp2a5akar")
  2745. ("philipk" "1xkrb7wa1pyhbs4xxx7vnnzsxrqzswk7gjbdac7i7rj0lwnfaij2")
  2746. ("projectiles" "1hra0f1ifiddh16fv4pqcr2amf046lf445v0653zkyri43zgrj5f")
  2747. ("props" "0ff6a8pz62f4nsk4c9cr50kirw108a661y5j6fvlsjickw3xjmyv")
  2748. ("skyboxes" "1lq58dhrdiivq7llkiyqwpi3bwa89r8hbi98p7zjhw7wdn34i6n2")
  2749. ("snipergoth" "0d5qf01bxd4dlffgxf8i91zq6mbyjmfd00dpyligpfj6fdbz87gc")
  2750. ("sounds" "0z6jmxsr3w735hrdnxypdb0gi399pwkaycv9grjpiqy43j3ic7gj")
  2751. ("textures" "0k5a47g2z99xn17vw7bqbp0w726gxmk33g5gwmqvfhxxxzzwimvi")
  2752. ("torley" "12x23l8xcv9ard5v76lb210lvp66whsns2p3k3xkd1sabp5ixbd5")
  2753. ("trak" "03kmwj47yb3dqzb6k9kilna9ja8c6jcnblvbs72x15767fl496pb")
  2754. ("ulukai" "0vvd016a7x981ixif6dnlg45s0ak7i89pgyrgwy2fpd94nl2am15")
  2755. ("unnamed" "18sxvdha41njp6g8wn56mjy6w9x778c793gh8fr0h9cnysb5gfmi")
  2756. ("vanities" "1p38mc2566bmb4vdyr9n9s6fkwmynp2xlpdq2a97gzgi4nmm0232")
  2757. ("vegetation" "0pf3qvqzabdcri5za61z6m89b5hq7sd3q0idkazmx88a62mcclkb")
  2758. ("weapons" "1jr05y9qhhx53plvir35srvv3cmn6wa065p3bskx6h1x6dcbx3c6")
  2759. ("wicked" "14b9f92h8hccp7a015z6rqgbs8236sdyxnwsq991ylnap7cbwvam"))))
  2760. (package
  2761. (name "red-eclipse")
  2762. (version (if (zero? revision)
  2763. release
  2764. (string-append release "-"
  2765. (number->string revision))))
  2766. (source (origin
  2767. (method url-fetch)
  2768. (uri (string-append "https://github.com/red-eclipse/base"
  2769. "/archive/v" release ".tar.gz"))
  2770. (file-name (string-append name "-" version ".tar.gz"))
  2771. (sha256
  2772. (base32
  2773. "1vs9k6f5fgsiy1n72imlqm8khjwm8cryc08zwd4gr7yxlxv45bs0"))
  2774. (patches
  2775. (search-patches "red-eclipse-remove-gamma-name-hack.patch"))))
  2776. (build-system gnu-build-system)
  2777. (arguments
  2778. `(#:tests? #f ; no check target
  2779. #:make-flags (list "CC=gcc" "-Csrc"
  2780. (string-append "INSTDIR="
  2781. (assoc-ref %outputs "out") "/bin")
  2782. (string-append "prefix="
  2783. (assoc-ref %outputs "out")))
  2784. #:phases
  2785. (modify-phases %standard-phases
  2786. (add-after 'unpack 'unpack-data
  2787. (lambda* (#:key inputs #:allow-other-keys)
  2788. (delete-file-recursively "data")
  2789. (mkdir "data")
  2790. (for-each (lambda (name)
  2791. (invoke "tar" "-xvf"
  2792. (assoc-ref inputs name)
  2793. "-Cdata"
  2794. "--transform"
  2795. (string-append "s/"
  2796. name "-" ,release "/"
  2797. name "/")))
  2798. (list ,@(map car data-sources)))
  2799. #t))
  2800. (add-after 'unpack-data 'add-store-data-package-path-as-default
  2801. (lambda* (#:key outputs #:allow-other-keys)
  2802. (substitute* "src/engine/server.cpp"
  2803. (("(else[[:space:]]*)((addpackagedir\\()\"data\"(\\);))"
  2804. _
  2805. else_part
  2806. addpackagedir_original
  2807. addpackagedir_open
  2808. addpackagedir_close)
  2809. (string-append else_part
  2810. "{ "
  2811. addpackagedir_open
  2812. "\""
  2813. (assoc-ref outputs "out")
  2814. "/share/redeclipse/data\""
  2815. addpackagedir_close
  2816. " "
  2817. addpackagedir_original
  2818. " }")))
  2819. #t))
  2820. (delete 'configure) ; no configure script
  2821. (add-after 'set-paths 'set-sdl-paths
  2822. (lambda* (#:key inputs #:allow-other-keys)
  2823. (setenv "CPATH"
  2824. (string-append (assoc-ref inputs "sdl-union")
  2825. "/include/SDL2"))
  2826. #t))
  2827. (add-after 'install 'copy-data
  2828. (lambda* (#:key outputs #:allow-other-keys)
  2829. (let ((out (assoc-ref outputs "out")))
  2830. (copy-recursively "config"
  2831. (string-append out "/config"))
  2832. (copy-file "doc/examples/servinit.cfg"
  2833. (string-append out "/config/servinit.cfg"))
  2834. (copy-recursively "data"
  2835. (string-append out "/share/redeclipse/data"))
  2836. (mkdir-p (string-append out "/lib/redeclipse"))
  2837. (symlink (string-append out "/share/redeclipse/data")
  2838. (string-append out "/lib/redeclipse/data")))
  2839. #t))
  2840. (add-after 'copy-data 'wrap-program
  2841. (lambda* (#:key inputs outputs #:allow-other-keys)
  2842. (let* ((out (assoc-ref outputs "out"))
  2843. (bin (string-append out "/bin")))
  2844. (with-directory-excursion bin
  2845. (rename-file "redeclipse_linux"
  2846. ".redeclipse_linux-real")
  2847. (rename-file "redeclipse_server_linux"
  2848. ".redeclipse_server_linux-real")
  2849. (call-with-output-file "redeclipse_linux"
  2850. (lambda (port)
  2851. (format port "#!~a/bin/sh
  2852. # Run the thing from its home, otherwise it just bails out.
  2853. cd \"~a\"
  2854. exec -a \"$0\" ~a/.redeclipse_linux-real~%"
  2855. (assoc-ref inputs "bash") ;implicit input
  2856. (string-append out)
  2857. (string-append bin))))
  2858. (call-with-output-file "redeclipse_server_linux"
  2859. (lambda (port)
  2860. (format port "#!~a/bin/sh
  2861. # Run the thing from its home, otherwise it just bails out.
  2862. cd \"~a\"
  2863. exec -a \"$0\" ~a/.redeclipse_server_linux-real~%"
  2864. (assoc-ref inputs "bash") ;implicit input
  2865. (string-append out)
  2866. (string-append bin))))
  2867. (chmod "redeclipse_linux" #o555)
  2868. (chmod "redeclipse_server_linux" #o555)))
  2869. #t)))))
  2870. (native-inputs `(("pkg-config" ,pkg-config)))
  2871. (inputs
  2872. `(("curl" ,curl)
  2873. ("glu" ,glu)
  2874. ("sdl-union" ,(sdl-union (list sdl2
  2875. sdl2-image
  2876. sdl2-mixer)))
  2877. ;; Create origin records for the many separate data packages.
  2878. ,@(map (match-lambda
  2879. ((name hash)
  2880. (list name
  2881. (origin
  2882. (method url-fetch)
  2883. (uri (string-append
  2884. "https://github.com/red-eclipse/"
  2885. name "/archive/v" release ".tar.gz"))
  2886. (sha256 (base32 hash))
  2887. (file-name (string-append name "-" version
  2888. ".tar.gz"))))))
  2889. data-sources)))
  2890. (home-page "http://redeclipse.net/")
  2891. (synopsis "Arena shooter derived from the Cube 2 engine")
  2892. (description
  2893. "Red Eclipse is an arena shooter, created from the Cube2 engine.
  2894. Offering an innovative parkour system and distinct but all potent weapons,
  2895. Red Eclipse provides fast paced and accessible gameplay.")
  2896. ;; The engine is under Zlib; data files are covered by the other
  2897. ;; licenses. More details at <http://redeclipse.net/wiki/License>.
  2898. (license (list license:expat
  2899. license:zlib
  2900. license:cc-by-sa3.0
  2901. license:cc-by3.0
  2902. license:cc0)))))
  2903. (define-public grue-hunter
  2904. (package
  2905. (name "grue-hunter")
  2906. (version "1.0")
  2907. (source (origin
  2908. (method url-fetch)
  2909. (uri (string-append "https://jxself.org/" name ".tar.gz"))
  2910. (sha256
  2911. (base32
  2912. "1hjcpy5439qs3v2zykis7hsi0i17zjs62gks3zd8mnfw9ni4i2h3"))))
  2913. (build-system trivial-build-system) ; no Makefile.PL
  2914. (arguments `(#:modules ((guix build utils))
  2915. #:builder
  2916. (begin
  2917. (use-modules (guix build utils))
  2918. (use-modules (srfi srfi-1))
  2919. (let* ((tarball (assoc-ref %build-inputs "tarball"))
  2920. (perl (string-append (assoc-ref %build-inputs
  2921. "perl")
  2922. "/bin"))
  2923. (gzip (string-append (assoc-ref %build-inputs
  2924. "gzip")
  2925. "/bin/gzip"))
  2926. (tar (string-append (assoc-ref %build-inputs
  2927. "tar")
  2928. "/bin/tar"))
  2929. (out (assoc-ref %outputs "out"))
  2930. (bin (string-append out "/bin"))
  2931. (doc (string-append out
  2932. "/share/doc/grue-hunter")))
  2933. (copy-file tarball "grue-hunter.tar.gz")
  2934. (invoke gzip "-d" "grue-hunter.tar.gz")
  2935. (invoke tar "xvf" "grue-hunter.tar")
  2936. (mkdir-p bin)
  2937. (copy-file "grue-hunter/gh.pl"
  2938. (string-append bin "/grue-hunter"))
  2939. (patch-shebang (string-append bin "/grue-hunter")
  2940. (list perl))
  2941. (install-file "grue-hunter/AGPLv3.txt" doc)
  2942. #t))))
  2943. (inputs `(("perl" ,perl)
  2944. ("tar" ,tar)
  2945. ("gzip" ,gzip)
  2946. ("tarball" ,source)))
  2947. (home-page "http://jxself.org/grue-hunter.shtml")
  2948. (synopsis "Text adventure game")
  2949. (description
  2950. "Grue Hunter is a text adventure game written in Perl. You must make
  2951. your way through an underground cave system in search of the Grue. Can you
  2952. capture it and get out alive?")
  2953. (license license:agpl3+)))
  2954. (define-public lierolibre
  2955. (package
  2956. (name "lierolibre")
  2957. (version "0.5")
  2958. (source (origin
  2959. (method url-fetch)
  2960. (uri (string-append "https://launchpad.net/lierolibre/trunk/"
  2961. version "/+download/lierolibre-"
  2962. version ".tar.xz"))
  2963. (sha256
  2964. (base32
  2965. "1cf1gvsn4qq190lrf9k5bpjnqwlcfw7pajvdnh7z5r4jqw0rsbl9"))
  2966. (patches
  2967. (search-patches "lierolibre-check-unaligned-access.patch"
  2968. "lierolibre-try-building-other-arch.patch"
  2969. "lierolibre-remove-arch-warning.patch"
  2970. "lierolibre-newer-libconfig.patch"
  2971. "lierolibre-is-free-software.patch"))
  2972. (modules '((guix build utils)))
  2973. (snippet
  2974. '(begin
  2975. ;; Delete pre-compiled files.
  2976. (delete-file "data/LIERO.CHR")
  2977. (delete-file "data/LIERO.SND")
  2978. #t))))
  2979. (build-system gnu-build-system)
  2980. (native-inputs
  2981. `(("imagemagick" ,imagemagick)
  2982. ("pkg-config" ,pkg-config)
  2983. ("util-linux" ,util-linux)
  2984. ("sox" ,sox)))
  2985. (inputs
  2986. `(("boost" ,boost)
  2987. ("libconfig" ,libconfig)
  2988. ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer)))
  2989. ("zlib" ,zlib)))
  2990. (home-page "https://gitlab.com/lierolibre/lierolibre")
  2991. (synopsis "Old-school earthworm action game")
  2992. (description
  2993. "lierolibre is an earthworm action game where you fight another player
  2994. (or the computer) underground using a wide array of weapons.
  2995. Features:
  2996. @itemize
  2997. @item 2 worms, 40 weapons, great playability, two game modes: Kill'em All
  2998. and Game of Tag, plus AI-players without true intelligence!
  2999. @item Dat nostalgia.
  3000. @item Extensions via a hidden F1 menu:
  3001. @itemize
  3002. @item Replays
  3003. @item Game controller support
  3004. @item Powerlevel palettes
  3005. @end itemize
  3006. @item Ability to write game variables to plain text files.
  3007. @item Ability to load game variables from both EXE and plain text files.
  3008. @item Scripts to extract and repack graphics, sounds and levels.
  3009. @end itemize
  3010. To switch between different window sizes, use F6, F7 and F8, to switch to
  3011. fullscreen, use F5 or Alt+Enter.")
  3012. ;; Code mainly BSD-2, some parts under Boost 1.0. All assets are WTFPL2.
  3013. (license (list license:bsd-2 license:boost1.0 license:wtfpl2))))
  3014. (define-public warzone2100
  3015. (package
  3016. (name "warzone2100")
  3017. (version "3.2.3")
  3018. (source (origin
  3019. (method url-fetch)
  3020. (uri (string-append "mirror://sourceforge/" name
  3021. "/releases/" version "/" name "-" version
  3022. ".tar.xz"))
  3023. (sha256
  3024. (base32
  3025. "10kmpr4cby95zwqsl1zwx95d9achli6khq7flv6xmrq30a39xazw"))))
  3026. (build-system gnu-build-system)
  3027. (arguments
  3028. `(#:configure-flags '("--with-distributor=Guix")
  3029. #:phases
  3030. (modify-phases %standard-phases
  3031. (add-after 'unpack 'link-tests-with-qt
  3032. (lambda _
  3033. (substitute* "tests/Makefile.in"
  3034. (("(framework_linktest_LDADD|maptest_LDADD) = " prefix)
  3035. (string-append prefix "$(QT5_LIBS) ")))
  3036. #t))
  3037. (add-after 'unpack 'fix-ivis-linktest
  3038. (lambda _
  3039. (substitute* "tests/ivis_linktest.cpp"
  3040. (("iV_DrawTextRotated.*;")
  3041. (string-append "iV_DrawTextRotated(\"Press ESC to exit.\", "
  3042. "100, 100, 0.0f, font_regular);")))
  3043. #t)))))
  3044. (native-inputs `(("gettext" ,gettext-minimal)
  3045. ("pkg-config" ,pkg-config)
  3046. ("unzip" ,unzip)
  3047. ("zip" ,zip)))
  3048. (inputs `(("fontconfig" ,fontconfig)
  3049. ("freetype" ,freetype)
  3050. ("fribidi" ,fribidi)
  3051. ("glew" ,glew)
  3052. ("harfbuzz" ,harfbuzz)
  3053. ("libtheora" ,libtheora)
  3054. ("libvorbis" ,libvorbis)
  3055. ("libxrandr" ,libxrandr)
  3056. ("openal" ,openal)
  3057. ("physfs" ,physfs)
  3058. ("qtbase" ,qtbase)
  3059. ("qtscript" ,qtscript)
  3060. ("openssl" ,openssl)
  3061. ("sdl2" ,sdl2)))
  3062. (home-page "http://wz2100.net")
  3063. (synopsis "3D Real-time strategy and real-time tactics game")
  3064. (description
  3065. "Warzone 2100 offers campaign, multi-player, and single-player skirmish
  3066. modes. An extensive tech tree with over 400 different technologies, combined
  3067. with the unit design system, allows for a wide variety of possible units and
  3068. tactics.")
  3069. ; Everything is GPLv2+ unless otherwise specified in COPYING.NONGPL
  3070. (license (list license:bsd-3
  3071. license:cc0
  3072. license:cc-by-sa3.0
  3073. license:expat
  3074. license:gpl2+
  3075. license:lgpl2.1+))))
  3076. (define-public starfighter
  3077. (package
  3078. (name "starfighter")
  3079. (version "1.7")
  3080. (source (origin
  3081. (method url-fetch)
  3082. (uri (string-append
  3083. "mirror://savannah/starfighter/"
  3084. (version-major+minor version) "/"
  3085. name "-" version "-src.tar.gz"))
  3086. (sha256
  3087. (base32
  3088. "1646hpjq8bz2fkfkja1dah511hn7zd2r7da4w9c9blhad3p5732v"))))
  3089. (build-system gnu-build-system)
  3090. (native-inputs
  3091. `(("pkg-config" ,pkg-config)))
  3092. (inputs
  3093. `(("sdl2" ,sdl2)
  3094. ("sdl2-image" ,sdl2-image)
  3095. ("sdl2-mixer" ,sdl2-mixer)))
  3096. (home-page "http://starfighter.nongnu.org/")
  3097. (synopsis "2D scrolling shooter game")
  3098. (description
  3099. "In the year 2579, the intergalactic weapons corporation, WEAPCO, has
  3100. dominated the galaxy. Guide Chris Bainfield and his friend Sid Wilson on
  3101. their quest to liberate the galaxy from the clutches of WEAPCO. Along the
  3102. way, you will encounter new foes, make new allies, and assist local rebels
  3103. in strikes against the evil corporation.")
  3104. ;; gfx and music are under CC-BY 3.0, CC-BY-SA 3.0, CC0 or Public Domain.
  3105. (license (list license:gpl3+
  3106. license:cc-by3.0
  3107. license:cc-by-sa3.0
  3108. license:cc0
  3109. license:public-domain))))
  3110. (define-public chromium-bsu
  3111. (package
  3112. (name "chromium-bsu")
  3113. (version "0.9.16.1")
  3114. (source (origin
  3115. (method url-fetch)
  3116. (uri (string-append "mirror://sourceforge/" name
  3117. "/Chromium B.S.U. source code/"
  3118. name "-" version ".tar.gz"))
  3119. (sha256
  3120. (base32
  3121. "0jk2w5b6s6nkzri585bbz16cif2fhqcnl5l1mq3rd98r9nil3hd1"))))
  3122. (build-system gnu-build-system)
  3123. (native-inputs `(("pkg-config" ,pkg-config)))
  3124. (inputs `(("gettext" ,gettext-minimal)
  3125. ("glu" ,glu)
  3126. ("quesoglc" ,quesoglc)
  3127. ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer)))))
  3128. (home-page "http://chromium-bsu.sourceforge.net/")
  3129. (synopsis "Fast-paced, arcade-style, top-scrolling space shooter")
  3130. (description
  3131. "In this game you are the captain of the cargo ship Chromium B.S.U. and
  3132. are responsible for delivering supplies to the troops on the front line. Your
  3133. ship has a small fleet of robotic fighters which you control from the relative
  3134. safety of the Chromium vessel.")
  3135. ;; Clarified Artistic License for everything but sound, which is covered
  3136. ;; by the Expat License.
  3137. (license (list license:clarified-artistic license:expat))))
  3138. (define-public tuxpaint
  3139. (package
  3140. (name "tuxpaint")
  3141. (version "0.9.23") ;keep VER_DATE below in sync
  3142. (source
  3143. (origin
  3144. (method url-fetch)
  3145. (uri (string-append "mirror://sourceforge/tuxpaint/tuxpaint/"
  3146. version "/tuxpaint-" version ".tar.gz"))
  3147. (sha256
  3148. (base32
  3149. "09k9pxi88r3dx6dyjwf9h85d4qpva4i29qz63dc558hg9v21k69l"))
  3150. (modules '((guix build utils)))
  3151. (snippet
  3152. '(begin
  3153. ;; Remove win32 directory which contains binary dll's and the
  3154. ;; deprecated visualc directory.
  3155. (for-each delete-file-recursively '("win32" "visualc"))
  3156. (substitute* "Makefile"
  3157. ;; Do not rely on $(GPERF) being an absolute file name
  3158. (("\\[ -x \\$\\(GPERF\\) \\]")
  3159. "$(GPERF) --version >/dev/null 2>&1"))
  3160. #t))
  3161. (patches (search-patches "tuxpaint-stamps-path.patch"))))
  3162. (build-system gnu-build-system)
  3163. (native-inputs
  3164. `(("gperf" ,gperf)
  3165. ("pkg-config" ,pkg-config)))
  3166. (inputs
  3167. `(("cairo" ,cairo)
  3168. ("fribidi" ,fribidi)
  3169. ("gettext" ,gettext-minimal)
  3170. ("libpng" ,libpng)
  3171. ("librsvg" ,librsvg)
  3172. ("libpaper" ,libpaper)
  3173. ("netpbm" ,netpbm)
  3174. ("sdl" ,(sdl-union (list sdl sdl-mixer sdl-ttf sdl-image)))))
  3175. ;; TODO: Use system fonts rather than those in data/fonts
  3176. (arguments
  3177. `(#:make-flags `("VER_DATE=2018-09-02"
  3178. "GPERF=gperf" "CC=gcc"
  3179. "SDL_PCNAME=sdl SDL_image SDL_mixer SDL_ttf"
  3180. ,(string-append "PREFIX=" %output)
  3181. "KDE_PREFIX=$(PREFIX)/share/applications"
  3182. "KDE_ICON_PREFIX=$(PREFIX)/share/icons/"
  3183. "COMPLETIONDIR=$(PREFIX)/etc/bash_completion.d")
  3184. #:parallel-build? #f ;fails on some systems
  3185. #:tests? #f ;No tests
  3186. #:phases (modify-phases %standard-phases
  3187. (delete 'configure) ;no configure phase
  3188. (add-before 'install 'no-sys-cache
  3189. (lambda _ ;do not rebuild system conf cache
  3190. (substitute* "Makefile"
  3191. (("kbuildsycoca4") ""))
  3192. #t))
  3193. (add-after 'install 'fix-import
  3194. (lambda* (#:key inputs outputs #:allow-other-keys)
  3195. (let* ((out (assoc-ref outputs "out"))
  3196. (net (assoc-ref inputs "netpbm"))
  3197. (tpi (string-append out "/bin/tuxpaint-import")))
  3198. (substitute* tpi
  3199. ;; Point to installation prefix so that the default
  3200. ;; configure file is found.
  3201. (("/usr/local") out))
  3202. ;; tuxpaint-import uses a bunch of programs from
  3203. ;; netpbm, so make sure it knows where those are
  3204. (wrap-program tpi
  3205. `("PATH" ":" prefix
  3206. (,(string-append net "/bin"))))))))))
  3207. (native-search-paths
  3208. (list (search-path-specification
  3209. (variable "TUXPAINT_STAMPS_PATH")
  3210. (files '("share/tuxpaint/stamps")))))
  3211. (home-page "http://www.tuxpaint.org")
  3212. (synopsis "Drawing software for children")
  3213. (description
  3214. "Tux Paint is a free drawing program designed for young children (kids
  3215. ages 3 and up). It has a simple, easy-to-use interface; fun sound effects;
  3216. and an encouraging cartoon mascot who helps guide children as they use the
  3217. program. It provides a blank canvas and a variety of drawing tools to help
  3218. your child be creative.")
  3219. (license license:gpl2+)))
  3220. (define-public tuxpaint-stamps
  3221. (package
  3222. (name "tuxpaint-stamps")
  3223. (version "2018.09.01")
  3224. (source
  3225. (origin
  3226. (method url-fetch)
  3227. (uri (string-append "mirror://sourceforge/tuxpaint/tuxpaint-stamps/"
  3228. (string-map (λ (x) (if (eq? x #\.) #\- x)) version)
  3229. "/tuxpaint-stamps-" version ".tar.gz"))
  3230. (sha256
  3231. (base32
  3232. "1skr23k27yj3vgwfazpzxp90lb2a278gxrkr3bxw7az6zpkmb3yp"))))
  3233. (build-system trivial-build-system)
  3234. (native-inputs
  3235. `(("tar" ,tar)
  3236. ("gzip" ,gzip)))
  3237. (arguments
  3238. `(#:modules ((guix build utils))
  3239. #:builder (begin
  3240. (use-modules (guix build utils))
  3241. (setenv "PATH"
  3242. (string-append
  3243. (assoc-ref %build-inputs "tar") "/bin" ":"
  3244. (assoc-ref %build-inputs "gzip") "/bin"))
  3245. (invoke "tar" "xvf" (assoc-ref %build-inputs "source"))
  3246. (chdir (string-append ,name "-" ,version))
  3247. (let ((dir (string-append %output "/share/tuxpaint/stamps")))
  3248. (mkdir-p dir)
  3249. (copy-recursively "stamps" dir))
  3250. #t)))
  3251. (home-page (package-home-page tuxpaint))
  3252. (synopsis "Stamp images for Tux Paint")
  3253. (description
  3254. "This package contains a set of \"Rubber Stamp\" images which can be used
  3255. with the \"Stamp\" tool within Tux Paint.")
  3256. (license license:gpl2+)))
  3257. (define-public tuxpaint-config
  3258. (package
  3259. (name "tuxpaint-config")
  3260. (version "0.0.14") ;keep VER_DATE below in sync
  3261. (source
  3262. (origin
  3263. (method url-fetch)
  3264. (uri (string-append "mirror://sourceforge/tuxpaint/tuxpaint-config/"
  3265. version "/tuxpaint-config-" version ".tar.gz"))
  3266. (sha256
  3267. (base32
  3268. "0zkgxk436nqcp43zghkfmh397c7dvh5bwn2as7gwvv208bzyij6g"))))
  3269. (build-system gnu-build-system)
  3270. (native-inputs
  3271. `(("gettext" ,gettext-minimal)))
  3272. (inputs
  3273. `(("fltk" ,fltk)
  3274. ("libpaper" ,libpaper)
  3275. ;; TODO: Should the following be propagated by fltk?
  3276. ("libx11" ,libx11)
  3277. ("libxft" ,libxft)
  3278. ("mesa" ,mesa)))
  3279. (arguments
  3280. `(#:make-flags `("VER_DATE=2018-09-01"
  3281. "CONFDIR=/etc/tuxpaint" ;don't write to store
  3282. ,(string-append "PREFIX=" %output)
  3283. "GNOME_PREFIX=$(PREFIX)")
  3284. #:parallel-build? #f ;race conditions
  3285. #:tests? #f ;no tests
  3286. #:phases (modify-phases %standard-phases
  3287. (delete 'configure) ;no configure phase
  3288. (add-before 'install 'gzip-no-name
  3289. (lambda* _
  3290. (substitute* "Makefile"
  3291. ;; tuxpaint-config compresses its own documentation;
  3292. ;; make sure it uses flags for reproducibility.
  3293. (("gzip") "gzip --no-name"))))
  3294. (add-before 'install 'make-install-dirs
  3295. (lambda* (#:key outputs #:allow-other-keys)
  3296. (let ((out (assoc-ref outputs "out")))
  3297. (mkdir-p (string-append out "/bin"))
  3298. #t))))))
  3299. (home-page (package-home-page tuxpaint))
  3300. (synopsis "Configure Tux Paint")
  3301. (description
  3302. "Tux Paint Config is a graphical configuration editor for Tux Paint.")
  3303. (license license:gpl2))) ;no "or later" present
  3304. (define-public supertux
  3305. (package
  3306. (name "supertux")
  3307. (version "0.5.1")
  3308. (source (origin
  3309. (method url-fetch)
  3310. (uri (string-append "https://github.com/SuperTux/supertux/"
  3311. "releases/download/v" version "/SuperTux-v"
  3312. version "-Source.tar.gz"))
  3313. (sha256
  3314. (base32
  3315. "1i8avad7w7ikj870z519j383ldy29r6f956bs38cbr8wk513pp69"))))
  3316. (arguments
  3317. '(#:tests? #f
  3318. #:configure-flags '("-DINSTALL_SUBDIR_BIN=bin"
  3319. "-DENABLE_BOOST_STATIC_LIBS=OFF")))
  3320. (build-system cmake-build-system)
  3321. (inputs `(("sdl2" ,sdl2)
  3322. ("sdl2-image" ,sdl2-image)
  3323. ("sdl2-mixer" ,sdl2-mixer)
  3324. ("openal" ,openal)
  3325. ("mesa" ,mesa)
  3326. ("glew" ,glew)
  3327. ("libvorbis" ,libvorbis)
  3328. ("libogg" ,libogg)
  3329. ("physfs" ,physfs)
  3330. ("curl" ,curl)
  3331. ("boost" ,boost)))
  3332. (native-inputs `(("pkg-config" ,pkg-config)))
  3333. (synopsis "2D platformer game")
  3334. (description "SuperTux is a free classic 2D jump'n run sidescroller game
  3335. in a style similar to the original Super Mario games covered under
  3336. the GNU GPL.")
  3337. (home-page "https://supertuxproject.org/")
  3338. (license license:gpl3+)))
  3339. (define-public tintin++
  3340. (package
  3341. (name "tintin++")
  3342. (version "2.01.7")
  3343. (source
  3344. (origin
  3345. (method url-fetch)
  3346. (uri (string-append "mirror://sourceforge/tintin/TinTin++ Source Code/"
  3347. (version-major+minor version)
  3348. "/tintin-" version ".tar.gz"))
  3349. (sha256
  3350. (base32
  3351. "033n84pyxml3n3gd4dq0497n9w331bnrr1gppwipz9ashmq8jz7v"))))
  3352. (inputs
  3353. `(("gnutls" ,gnutls)
  3354. ("pcre" ,pcre)
  3355. ("readline" ,readline)
  3356. ("zlib" ,zlib)))
  3357. (arguments
  3358. '(#:tests? #f ; no test suite
  3359. #:phases
  3360. (modify-phases %standard-phases
  3361. ;; The source is in tt/src.
  3362. (add-before 'configure 'chdir
  3363. (lambda _
  3364. (chdir "src")
  3365. #t)))))
  3366. (build-system gnu-build-system)
  3367. (home-page "http://tintin.sourceforge.net/")
  3368. (synopsis "MUD client")
  3369. (description
  3370. "TinTin++ is a MUD client which supports MCCP (Mud Client Compression
  3371. Protocol), MMCP (Mud Master Chat Protocol), xterm 256 colors, most TELNET
  3372. options used by MUDs, as well as those required to login via telnet on
  3373. Linux / Mac OS X servers, and an auto mapper with a VT100 map display.")
  3374. (license license:gpl2+)))
  3375. (define-public laby
  3376. (package
  3377. (name "laby")
  3378. (version "0.6.4")
  3379. (source
  3380. (origin (method url-fetch)
  3381. (uri (string-append
  3382. "https://github.com/sgimenez/laby/archive/"
  3383. name "-" version ".tar.gz"))
  3384. (sha256
  3385. (base32
  3386. "0gyrfa95l1qka7gbjf7l6mk7mbfvph00l0c995ia272qdw7rjhyf"))
  3387. (patches (search-patches "laby-make-install.patch"))))
  3388. (build-system gnu-build-system)
  3389. (inputs
  3390. `(("lablgtk" ,lablgtk)
  3391. ("ocaml" ,ocaml)
  3392. ("ocaml-findlib" ,ocaml-findlib)))
  3393. (arguments
  3394. '(#:phases
  3395. (modify-phases %standard-phases
  3396. (delete 'configure)
  3397. (add-before 'build 'setenv
  3398. (lambda* (#:key inputs #:allow-other-keys)
  3399. (let ((lablgtk (assoc-ref inputs "lablgtk")))
  3400. (setenv "LD_LIBRARY_PATH"
  3401. (string-append lablgtk "/lib/ocaml/stublibs"))))))
  3402. #:tests? #f ; no 'check' target
  3403. #:make-flags
  3404. (list (string-append "PREFIX=" (assoc-ref %outputs "out")) "all")))
  3405. (home-page "https://sgimenez.github.io/laby/")
  3406. (synopsis "Programming game")
  3407. (description "Learn programming, playing with ants and spider webs ;-)
  3408. Your robot ant can be programmed in many languages: OCaml, Python, C, C++,
  3409. Java, Ruby, Lua, JavaScript, Pascal, Perl, Scheme, Vala, Prolog. Experienced
  3410. programmers may also add their own favorite language.")
  3411. (license license:gpl3+)))
  3412. (define-public bambam
  3413. (package
  3414. (name "bambam")
  3415. (version "0.6")
  3416. (source
  3417. (origin
  3418. (method git-fetch)
  3419. (uri (git-reference
  3420. (url "https://github.com/porridge/bambam")
  3421. (commit version)))
  3422. (file-name (git-file-name name version))
  3423. (sha256
  3424. (base32
  3425. "08hcd0gzia3pz7fzk4pqc5kbq1074j4q0jcmbpgvr7n623nj2xa5"))))
  3426. (build-system python-build-system)
  3427. (arguments
  3428. `(#:python ,python-2
  3429. #:tests? #f ; no tests
  3430. #:phases
  3431. (modify-phases %standard-phases
  3432. (delete 'build)
  3433. (add-before 'install 'patch-data-dir-location
  3434. (lambda _
  3435. (substitute* "bambam.py"
  3436. (("'data'") "'../share/bambam/data'"))
  3437. #t))
  3438. (replace 'install
  3439. (lambda* (#:key outputs #:allow-other-keys)
  3440. (let* ((out (assoc-ref outputs "out"))
  3441. (bin (string-append out "/bin"))
  3442. (share (string-append out "/share")))
  3443. (mkdir-p bin)
  3444. (copy-file "bambam.py" (string-append bin "/bambam"))
  3445. (install-file "bambam.6" (string-append share "/man/man6"))
  3446. (copy-recursively "data" (string-append share "/bambam/data")))
  3447. #t)))))
  3448. (inputs
  3449. `(("python-pygame" ,python-pygame)))
  3450. (home-page "https://github.com/porridge/bambam")
  3451. (synopsis "Keyboard mashing and doodling game for babies")
  3452. (description "Bambam is a simple baby keyboard (and gamepad) masher
  3453. application that locks the keyboard and mouse and instead displays bright
  3454. colors, pictures, and sounds.")
  3455. (license license:gpl3+)))
  3456. (define-public mrrescue
  3457. (package
  3458. (name "mrrescue")
  3459. (version "1.02e")
  3460. (source (origin
  3461. (method url-fetch)
  3462. (uri (string-append
  3463. "https://github.com/SimonLarsen/mrrescue/releases/"
  3464. "download/" version "/" name version ".love"))
  3465. (file-name (string-append name "-" version ".love"))
  3466. (sha256
  3467. (base32
  3468. "0jwzbwkgp1l5ia6c7s760gmdirbsncp6nfqp7vqdqsfb63la9gl2"))))
  3469. (build-system trivial-build-system)
  3470. (arguments
  3471. `(#:modules ((guix build utils))
  3472. #:builder
  3473. (begin
  3474. (use-modules (guix build utils))
  3475. (let* ((out (assoc-ref %outputs "out"))
  3476. (script (string-append out "/bin/" ,name))
  3477. (data (string-append out "/share/" ,name))
  3478. (source (assoc-ref %build-inputs "source"))
  3479. (unzip (string-append (assoc-ref %build-inputs "unzip")
  3480. "/bin/unzip"))
  3481. (patch (string-append (assoc-ref %build-inputs "patch")
  3482. "/bin/patch"))
  3483. (bash (string-append (assoc-ref %build-inputs "bash")
  3484. "/bin/bash"))
  3485. (love (string-append (assoc-ref %build-inputs "love")
  3486. "/bin/love")))
  3487. (mkdir-p (dirname script))
  3488. (with-output-to-file script
  3489. (lambda ()
  3490. (format #t "#!~a~%" bash)
  3491. (format #t "exec -a ~a \"~a\" \"~a\"~%" ,name love data)))
  3492. (chmod script #o755)
  3493. ;; The better way to package this game would be to install *only* the
  3494. ;; script above, pointing to the unextracted .love file in the store.
  3495. ;; However, mrrescue 1.02e needs to be patched to work with Love 11.
  3496. ;; Instead of extracting the .love file, patching it, and re-zipping
  3497. ;; it to the store, simply point the script to the extracted patched
  3498. ;; data directory directly.
  3499. (mkdir-p data)
  3500. (with-directory-excursion data
  3501. (invoke unzip source)
  3502. (invoke patch "-p1" "-i"
  3503. (assoc-ref %build-inputs "love-11.patch")))
  3504. #t))))
  3505. (native-inputs
  3506. `(("unzip" ,unzip)
  3507. ("patch" ,patch)
  3508. ("love-11.patch" ,(search-patch "mrrescue-support-love-11.patch"))))
  3509. (inputs
  3510. `(("bash" ,bash)
  3511. ("love" ,love)))
  3512. (home-page "http://tangramgames.dk/games/mrrescue")
  3513. (synopsis "Arcade-style fire fighting game")
  3514. (description
  3515. "Mr. Rescue is an arcade styled 2d action game centered around evacuating
  3516. civilians from burning buildings. The game features fast-paced fire
  3517. extinguishing action, intense boss battles, a catchy soundtrack, and lots of
  3518. throwing people around in pseudo-randomly generated buildings.")
  3519. (license (list license:zlib ; for source code
  3520. license:cc-by-sa3.0)))) ; for graphics and music assets
  3521. (define-public hyperrogue
  3522. (package
  3523. (name "hyperrogue")
  3524. (version "10.5d")
  3525. ;; When updating this package, be sure to update the "hyperrogue-data"
  3526. ;; origin in native-inputs.
  3527. (source (origin
  3528. (method url-fetch)
  3529. (uri (string-append
  3530. "https://www.roguetemple.com/z/hyper/"
  3531. name (string-join (string-split version #\.) "")
  3532. "-src.tgz"))
  3533. (sha256
  3534. (base32
  3535. "1ls055v4pv2xmn2a8lav7wl370zn0wsd91q41bk0amxd168kcndy"))))
  3536. (build-system gnu-build-system)
  3537. (arguments
  3538. `(#:tests? #f ; no check target
  3539. #:make-flags '("HYPERROGUE_USE_GLEW=1"
  3540. "HYPERROGUE_USE_PNG=1")
  3541. #:phases
  3542. (modify-phases %standard-phases
  3543. (add-after 'set-paths 'set-sdl-paths
  3544. (lambda* (#:key inputs #:allow-other-keys)
  3545. (setenv "CPATH"
  3546. (string-append (assoc-ref inputs "sdl-union")
  3547. "/include/SDL"))))
  3548. (replace 'configure
  3549. (lambda* (#:key inputs outputs #:allow-other-keys)
  3550. (let* ((out (assoc-ref outputs "out"))
  3551. (share-dir (string-append out "/share/hyperrogue"))
  3552. (dejavu-dir (string-append
  3553. (assoc-ref inputs "font-dejavu")
  3554. "/share/fonts/truetype"))
  3555. (dejavu-font "DejaVuSans-Bold.ttf")
  3556. (music-file "hyperrogue-music.txt"))
  3557. ;; Fix font and music paths.
  3558. (substitute* "basegraph.cpp"
  3559. ((dejavu-font)
  3560. (string-append dejavu-dir "/" dejavu-font)))
  3561. (substitute* music-file
  3562. (("\\*/")
  3563. (string-append share-dir "/sounds/")))
  3564. (substitute* "sound.cpp"
  3565. (("musicfile = \"\"")
  3566. (string-append "musicfile = \""
  3567. share-dir "/" music-file "\"")))
  3568. ;; Disable build machine CPU optimizations and warnings treated
  3569. ;; as errors.
  3570. (substitute* "Makefile"
  3571. (("-march=native") "")
  3572. (("-Werror") "")))
  3573. #t))
  3574. (replace 'install
  3575. (lambda* (#:key inputs outputs #:allow-other-keys)
  3576. (let* ((out (assoc-ref outputs "out"))
  3577. (bin (string-append out "/bin"))
  3578. (share-dir (string-append out "/share/hyperrogue")))
  3579. (mkdir-p bin)
  3580. (install-file "hyperrogue" bin)
  3581. (install-file "hyperrogue-music.txt" share-dir))
  3582. #t))
  3583. (add-after 'install 'install-data
  3584. (lambda* (#:key inputs outputs #:allow-other-keys)
  3585. (let* ((data (assoc-ref inputs "hyperrogue-data"))
  3586. (out (assoc-ref outputs "out"))
  3587. (sounds (string-append out "/share/hyperrogue/sounds"))
  3588. (unzip (string-append (assoc-ref inputs "unzip") "/bin/unzip")))
  3589. ;; Extract media license information into sounds directory.
  3590. (invoke unzip "-j" data
  3591. (string-append
  3592. "hyperrogue"
  3593. (string-join (string-split ,version #\.) "")
  3594. "/sounds/credits.txt") "-d" sounds)
  3595. ;; Extract sounds and music into sounds directory.
  3596. (invoke "unzip" "-j" data
  3597. (string-append
  3598. "hyperrogue"
  3599. (string-join (string-split ,version #\.) "")
  3600. "/*.ogg") "-d" sounds)))))))
  3601. (native-inputs
  3602. `(("hyperrogue-data"
  3603. ,(origin
  3604. (method url-fetch)
  3605. (uri
  3606. (string-append
  3607. "https://www.roguetemple.com/z/hyper/" name
  3608. (string-join (string-split version #\.) "")
  3609. "-win.zip"))
  3610. (sha256
  3611. (base32
  3612. "13n9hcvf9yv7kjghm5jhjpwq1kh94i4bgvcczky9kvdvw1y9278n"))))
  3613. ("unzip" ,unzip)))
  3614. (inputs
  3615. `(("font-dejavu" ,font-dejavu)
  3616. ("glew" ,glew)
  3617. ("libpng" ,libpng)
  3618. ("sdl-union" ,(sdl-union (list sdl
  3619. sdl-gfx
  3620. sdl-mixer
  3621. sdl-ttf)))))
  3622. (home-page "https://www.roguetemple.com/z/hyper/")
  3623. (synopsis "Non-euclidean graphical rogue-like game")
  3624. (description
  3625. "HyperRogue is a game in which the player collects treasures and fights
  3626. monsters -- rogue-like but for the fact that it is played on the hyperbolic
  3627. plane and not in euclidean space.
  3628. In HyperRogue, the player can move through different parts of the world, which
  3629. are home to particular creatures and may be subject to their own rules of
  3630. \"physics\".
  3631. While the game can use ASCII characters to display the the classical rogue
  3632. symbols, it still needs graphics to render the non-euclidean world.")
  3633. (license (list license:bsd-3 ; glew.c, mtrand.*
  3634. license:cc-by-sa3.0 ; music
  3635. license:cc-by-sa4.0 ; sounds
  3636. license:cc0
  3637. license:public-domain ; direntx.*, some sounds
  3638. license:zlib ; savepng.*
  3639. license:gpl2+)))) ; remaining files
  3640. (define-public kobodeluxe
  3641. (package
  3642. (name "kobodeluxe")
  3643. (version "0.5.1")
  3644. (source (origin
  3645. (method url-fetch)
  3646. (uri (string-append "http://olofson.net/kobodl/download/KoboDeluxe-"
  3647. version ".tar.bz2"))
  3648. (sha256
  3649. (base32
  3650. "0b2wvdpnmaibsy419c16dfwj5kvd3pccby2aaqvm964x74592yqg"))
  3651. (patches (search-patches
  3652. "kobodeluxe-const-charp-conversion.patch"
  3653. "kobodeluxe-enemies-pipe-decl.patch"
  3654. "kobodeluxe-graphics-window-signed-char.patch"
  3655. "kobodeluxe-manpage-minus-not-hyphen.patch"
  3656. "kobodeluxe-midicon-segmentation-fault.patch"
  3657. "kobodeluxe-paths.patch"))))
  3658. (build-system gnu-build-system)
  3659. (arguments
  3660. '(#:configure-flags
  3661. (list (string-append "CPPFLAGS=-I"
  3662. (assoc-ref %build-inputs "sdl-union")
  3663. "/include/SDL"))))
  3664. (inputs `(("sdl-union" ,(sdl-union (list sdl sdl-image)))))
  3665. (synopsis "Shooter with space station destruction")
  3666. (description
  3667. "Kobo Deluxe is an enhanced version of Akira Higuchi's XKobo graphical game
  3668. for Un*x systems with X11.")
  3669. (home-page "http://olofson.net/kobodl/")
  3670. (license license:gpl2+)))
  3671. (define-public freeciv
  3672. (package
  3673. (name "freeciv")
  3674. (version "2.6.0")
  3675. (source
  3676. (origin
  3677. (method url-fetch)
  3678. (uri (list (string-append
  3679. "http://files.freeciv.org/stable/freeciv-"
  3680. version ".tar.bz2")
  3681. (string-append
  3682. "mirror://sourceforge/freeciv/Freeciv%20"
  3683. (version-major+minor version) "/" version
  3684. "/freeciv-" version ".tar.bz2")))
  3685. (sha256
  3686. (base32
  3687. "16f9wsnn7073s6chzbm3819swd0iw019p9nrzr3diiynk28kj83w"))))
  3688. (build-system gnu-build-system)
  3689. (inputs
  3690. `(("curl" ,curl)
  3691. ("cyrus-sasl" ,cyrus-sasl)
  3692. ("gtk+" ,gtk+)
  3693. ("sdl-mixer" ,sdl-mixer)
  3694. ("zlib" ,zlib)))
  3695. (native-inputs
  3696. `(("pkg-config" ,pkg-config)))
  3697. (home-page "http://www.freeciv.org/")
  3698. (synopsis "Turn based empire building strategy game")
  3699. (description "Freeciv is a turn based empire building strategy game
  3700. inspired by the history of human civilization. The game commences in
  3701. prehistory and your mission is to lead your tribe from the Stone Age
  3702. to the Space Age.")
  3703. (license license:gpl2+)))
  3704. (define-public no-more-secrets
  3705. (package
  3706. (name "no-more-secrets")
  3707. (version "0.3.3")
  3708. (source
  3709. (origin
  3710. (method url-fetch)
  3711. (uri (string-append "https://github.com/bartobri/no-more-secrets/"
  3712. "archive/v" version ".tar.gz"))
  3713. (file-name (string-append name "-" version ".tar.gz"))
  3714. (sha256
  3715. (base32
  3716. "1kpx1rirc3i7fb4lymp0hx5rqr0s2ay4za261rw3bcy6d23l1kyg"))))
  3717. (build-system gnu-build-system)
  3718. (arguments
  3719. `(#:tests? #f
  3720. #:make-flags (list "CC=gcc" "all-ncurses"
  3721. (string-append "prefix="
  3722. (assoc-ref %outputs "out")))
  3723. #:phases
  3724. (modify-phases %standard-phases
  3725. (delete 'configure))))
  3726. (inputs
  3727. `(("ncurses" ,ncurses)))
  3728. (home-page "https://github.com/bartobri/no-more-secrets")
  3729. (synopsis "Recreation of data decryption effect in \"Sneakers\"")
  3730. (description
  3731. "@code{No More Secrets} provides a command line tool called \"nms\"
  3732. that recreates the famous data decryption effect seen on screen in the 1992
  3733. movie \"Sneakers\".
  3734. This command works on piped data. Pipe any ASCII or UTF-8 text to nms, and
  3735. it will apply the hollywood effect, initially showing encrypted data, then
  3736. starting a decryption sequence to reveal the original plaintext characters.")
  3737. (license license:expat)))
  3738. (define-public megaglest-data
  3739. (package
  3740. (name "megaglest-data")
  3741. (version "3.13.0")
  3742. (source
  3743. (origin
  3744. (method url-fetch)
  3745. (uri (string-append
  3746. "https://github.com/MegaGlest/megaglest-data"
  3747. "/releases/download/" version "/megaglest-data-"
  3748. version ".tar.xz"))
  3749. (sha256
  3750. (base32
  3751. "0ipgza33z89fw3si32iafm981f3fvm0zldvbxj29whghd2k3rpj3"))))
  3752. (build-system cmake-build-system)
  3753. (arguments
  3754. `(#:tests? #f))
  3755. (home-page "https://megaglest.org/")
  3756. (synopsis "Data files for MegaGlest")
  3757. (description "This package contains the data files required for MegaGlest.")
  3758. (license license:cc-by-sa3.0)))
  3759. (define-public megaglest
  3760. (package
  3761. (name "megaglest")
  3762. (version "3.13.0")
  3763. (source
  3764. (origin
  3765. (method url-fetch)
  3766. (uri (string-append
  3767. "https://github.com/MegaGlest/megaglest-source"
  3768. "/releases/download/" version "/megaglest-source-"
  3769. version ".tar.xz"))
  3770. (sha256
  3771. (base32
  3772. "1ffck3ii1wp5k3nn5p0ga06jgp7pzk4zw0xln3xim2w7qrxzdzh9"))))
  3773. (build-system cmake-build-system)
  3774. (inputs
  3775. `(("curl" ,curl)
  3776. ("fontconfig" ,fontconfig)
  3777. ("ftgl" ,ftgl)
  3778. ("glew" ,glew)
  3779. ("libjpeg-turbo" ,libjpeg-turbo)
  3780. ("megaglest-data" ,megaglest-data)
  3781. ("mesa" ,mesa)
  3782. ("miniupnpc" ,miniupnpc)
  3783. ("openal" ,openal)
  3784. ("libircclient" ,libircclient)
  3785. ("libpng" ,libpng)
  3786. ("libvorbis" ,libvorbis)
  3787. ("lua" ,lua)
  3788. ("sdl2" ,sdl2)
  3789. ("wxwidgets" ,wxwidgets)))
  3790. (native-inputs
  3791. `(("cppunit" ,cppunit)
  3792. ("pkg-config" ,pkg-config)))
  3793. (arguments
  3794. `(#:configure-flags
  3795. (list (string-append "-DCUSTOM_DATA_INSTALL_PATH="
  3796. (assoc-ref %build-inputs "megaglest-data")
  3797. "/share/megaglest")
  3798. "-DBUILD_MEGAGLEST_TESTS=ON")
  3799. #:phases
  3800. (modify-phases %standard-phases
  3801. (add-after 'unpack 'fix-ini-search-path
  3802. (lambda* (#:key outputs #:allow-other-keys)
  3803. (substitute* "source/glest_game/global/config.cpp"
  3804. (("/usr/share/megaglest/")
  3805. (string-append (assoc-ref outputs "out")
  3806. "/share/megaglest/"))))))
  3807. #:test-target "megaglest_tests"))
  3808. (home-page "https://megaglest.org/")
  3809. (synopsis "3D real-time strategy (RTS) game")
  3810. (description "MegaGlest is a cross-platform 3D real-time strategy (RTS)
  3811. game, where you control the armies of one of seven different factions: Tech,
  3812. Magic, Egypt, Indians, Norsemen, Persian or Romans.")
  3813. (license license:gpl2+)))
  3814. (define-public freegish
  3815. (let ((commit "8795cd7adc95957883f2d3465eb9036a774667a7")
  3816. (revision "1"))
  3817. (package
  3818. (name "freegish")
  3819. (version (string-append "0-" revision "." (string-take commit 9)))
  3820. (source (origin
  3821. (method git-fetch)
  3822. (uri (git-reference
  3823. (url "https://github.com/freegish/freegish.git")
  3824. (commit commit)))
  3825. (file-name (git-file-name name version))
  3826. (sha256
  3827. (base32
  3828. "1p1zf5qqagmcpi1db2bs02cnalpy3qiymp6yzan7k1bhmv859gsx"))
  3829. (modules '((guix build utils)))
  3830. ;; The audio files in the "music" directory are licensed under
  3831. ;; CC-BY-NC, so we delete them.
  3832. (snippet
  3833. '(begin
  3834. (delete-file-recursively "music")
  3835. #t))))
  3836. (build-system cmake-build-system)
  3837. (arguments
  3838. `(#:tests? #f ; no tests included
  3839. #:configure-flags
  3840. (list "-DCMAKE_INSTALL_FHS=ON")
  3841. #:phases
  3842. (modify-phases %standard-phases
  3843. (add-after 'unpack 'set-DATAPATH
  3844. (lambda* (#:key outputs #:allow-other-keys)
  3845. (substitute* "CMakeLists.txt"
  3846. (("^option\\(INSTALL_FHS" line)
  3847. (string-append "add_definitions(-DDATAPATH=\""
  3848. (assoc-ref outputs "out") "/share/freegish\")\n"
  3849. line)))
  3850. #t)))))
  3851. (inputs
  3852. `(("sdl-union" ,(sdl-union (list sdl sdl-mixer)))
  3853. ("openal" ,openal)
  3854. ("libvorbis" ,libvorbis)
  3855. ("libogg" ,libogg)
  3856. ("mesa" ,mesa)
  3857. ("libpng" ,libpng)
  3858. ("zlib" ,zlib)))
  3859. (home-page "https://github.com/freegish/freegish")
  3860. (synopsis "Side-scrolling physics platformer with a ball of tar")
  3861. (description "In FreeGish you control Gish, a ball of tar who lives
  3862. happily with his girlfriend Brea, until one day a mysterious dark creature
  3863. emerges from a sewer hole and pulls her below ground.")
  3864. ;; The textures are available under the Expat license. All other assets
  3865. ;; (including levels) are covered under CC-BY-SA or public domain. The
  3866. ;; source code is under GPLv2+.
  3867. (license (list license:gpl2+
  3868. license:expat
  3869. license:public-domain
  3870. license:cc-by-sa3.0)))))
  3871. (define-public cdogs-sdl
  3872. (package
  3873. (name "cdogs-sdl")
  3874. (version "0.6.9")
  3875. (source (origin
  3876. (method git-fetch)
  3877. (uri (git-reference
  3878. (url "https://github.com/cxong/cdogs-sdl.git")
  3879. (commit version)))
  3880. (file-name (git-file-name name version))
  3881. (sha256
  3882. (base32
  3883. "13gyv2hzk43za1n3lsjnd5v64xlzfzq7n10scd1rcbsnk1n007zr"))))
  3884. (build-system cmake-build-system)
  3885. (arguments
  3886. `(#:configure-flags
  3887. (list (string-append "-DCDOGS_DATA_DIR="
  3888. (assoc-ref %outputs "out")
  3889. "/share/cdogs-sdl/"))))
  3890. (inputs
  3891. `(("mesa" ,mesa)
  3892. ("sdl2" ,sdl2)
  3893. ("sdl2-image" ,sdl2-image)
  3894. ("sdl2-mixer" ,sdl2-mixer)))
  3895. (home-page "https://cxong.github.io/cdogs-sdl/")
  3896. (synopsis "Classic overhead run-and-gun game")
  3897. (description "C-Dogs SDL is a classic overhead run-and-gun game,
  3898. supporting up to 4 players in co-op and deathmatch modes. Customize your
  3899. player, choose from many weapons, and blast, slide and slash your way through
  3900. over 100 user-created campaigns.")
  3901. ;; GPLv2+ for code (includes files under BSD-2 and BSD-3),
  3902. ;; CC0/CC-BY/CC-BY-SA for assets.
  3903. (license (list license:gpl2+
  3904. license:bsd-2
  3905. license:bsd-3
  3906. license:cc0
  3907. license:cc-by3.0
  3908. license:cc-by-sa3.0))))
  3909. (define-public kiki
  3910. (package
  3911. (name "kiki")
  3912. (version "1.0.2")
  3913. (source (origin
  3914. (method url-fetch)
  3915. (uri (string-append "mirror://sourceforge/kiki/kiki-src/"
  3916. version "/kiki-" version "-src.tgz"))
  3917. (sha256
  3918. (base32
  3919. "0ihjdsxbn8z3cz0gpcprafiipcqaiskgdnh1rhmw4qff8dszalbn"))
  3920. (modules '((guix build utils)))
  3921. (snippet
  3922. '(begin
  3923. (for-each delete-file (find-files "." "\\.dll$"))
  3924. #t))
  3925. (patches
  3926. (search-patches "kiki-level-selection-crash.patch"
  3927. "kiki-makefile.patch"
  3928. "kiki-missing-includes.patch"
  3929. "kiki-portability-64bit.patch"))))
  3930. (build-system gnu-build-system)
  3931. (arguments
  3932. `(#:tests? #f ; there are no tests
  3933. #:make-flags '("CXX=g++")
  3934. #:phases
  3935. (modify-phases %standard-phases
  3936. (replace 'configure
  3937. (lambda* (#:key inputs outputs #:allow-other-keys)
  3938. (setenv "CPLUS_INCLUDE_PATH"
  3939. (string-append (assoc-ref inputs "sdl-union")
  3940. "/include/SDL:"
  3941. (assoc-ref inputs "python")
  3942. "/include/python2.7:"
  3943. (getenv "CPLUS_INCLUDE_PATH")))
  3944. (substitute* "src/main/main.cpp"
  3945. (("#include <SDL.h>" line)
  3946. (string-append line "
  3947. #define K_INCLUDE_GLUT
  3948. #include \"KIncludeTools.h\""))
  3949. (("// initialize SDL" line)
  3950. (string-append "glutInit(&argc,argv);\n" line)))
  3951. (substitute* "src/main/KikiController.cpp"
  3952. (("getenv\\(\"KIKI_HOME\"\\)")
  3953. (string-append "\"" (assoc-ref outputs "out") "/share/kiki/\"")))
  3954. (substitute* "linux/Makefile"
  3955. (("CXXOPTS =" line)
  3956. (string-append line " -fpermissive"))
  3957. (("PYTHON_VERSION=.*") "PYTHON_VERSION=2.7")
  3958. (("PYTHONHOME =.*")
  3959. (string-append "PYTHONHOME = "
  3960. (assoc-ref inputs "python")
  3961. "/lib/python2.7/"))
  3962. (("\\$\\(GLLIBS\\)" line)
  3963. (string-append line " -lm -lpython2.7")))
  3964. (substitute* "src/main/KikiPythonWidget.h"
  3965. (("#define __KikiPythonWidget" line)
  3966. (string-append line "\n#include \"KikiPython.h\"")))
  3967. #t))
  3968. (add-before 'build 'build-kodilib
  3969. (lambda* (#:key make-flags #:allow-other-keys)
  3970. (with-directory-excursion "kodilib/linux"
  3971. (apply invoke "make" make-flags))))
  3972. (add-after 'build-kodilib 'chdir
  3973. (lambda _ (chdir "linux") #t))
  3974. (replace 'install
  3975. (lambda* (#:key outputs #:allow-other-keys)
  3976. (let* ((out (assoc-ref outputs "out"))
  3977. (bin (string-append out "/bin"))
  3978. (share (string-append out "/share/kiki")))
  3979. (mkdir-p bin)
  3980. (mkdir-p share)
  3981. (install-file "kiki" bin)
  3982. (copy-recursively "../py" (string-append share "/py"))
  3983. (copy-recursively "../sound" (string-append share "/sound"))
  3984. #t))))))
  3985. (inputs
  3986. `(("glu" ,glu)
  3987. ;; Kiki builds fine with freeglut 3.0.0 but segfaults on start.
  3988. ("freeglut" ,freeglut-2.8)
  3989. ("sdl-union" ,(sdl-union (list sdl
  3990. sdl-mixer
  3991. sdl-image)))
  3992. ("python" ,python-2)))
  3993. (native-inputs
  3994. `(("swig" ,swig)))
  3995. (home-page "http://kiki.sourceforge.net/")
  3996. (synopsis "3D puzzle game")
  3997. (description "Kiki the nano bot is a 3D puzzle game. It is basically a
  3998. mixture of the games Sokoban and Kula-World. Your task is to help Kiki, a
  3999. small robot living in the nano world, repair its maker.")
  4000. ;; See <http://metadata.ftp-master.debian.org/changelogs/main/k/
  4001. ;; kiki-the-nano-bot/kiki-the-nano-bot_1.0.2+dfsg1-4_copyright>
  4002. ;; for a statement from the author.
  4003. (license license:public-domain)))
  4004. (define-public teeworlds
  4005. (package
  4006. (name "teeworlds")
  4007. (version "0.7.2")
  4008. (source (origin
  4009. (method git-fetch)
  4010. (uri (git-reference
  4011. (url "https://github.com/teeworlds/teeworlds.git")
  4012. (commit version)))
  4013. (file-name (git-file-name name version))
  4014. (sha256
  4015. (base32
  4016. "15l988qcsqgb6rjais0qd5sd2rjanm2708jmzvkariqzz0d6pb93"))
  4017. (modules '((guix build utils)
  4018. (ice-9 ftw)
  4019. (ice-9 regex)
  4020. (srfi srfi-1)
  4021. (srfi srfi-26)))
  4022. (snippet ; remove bundled libraries except md5
  4023. '(let ((base-dir "src/engine/external/"))
  4024. (for-each (compose (cut delete-file-recursively <>)
  4025. (cut string-append base-dir <>))
  4026. (remove (cut string-match "(^.)|(^md5$)" <>)
  4027. (scandir base-dir)))
  4028. #t))
  4029. (patches
  4030. (search-patches "teeworlds-use-latest-wavpack.patch"))))
  4031. (build-system gnu-build-system)
  4032. (arguments
  4033. `(#:tests? #f ; no tests included
  4034. #:modules ((guix build gnu-build-system)
  4035. (guix build utils)
  4036. (srfi srfi-26))
  4037. #:phases
  4038. (modify-phases %standard-phases
  4039. (replace 'configure
  4040. (lambda* (#:key outputs #:allow-other-keys)
  4041. ;; The bundled json-parser uses an old API.
  4042. ;; To use the latest non-bundled version, we need to pass the
  4043. ;; length of the data in all 'json_parse_ex' calls.
  4044. (define (use-latest-json-parser file)
  4045. (substitute* file
  4046. (("engine/external/json-parser/json\\.h")
  4047. "json-parser/json.h")
  4048. (("json_parse_ex\\(&JsonSettings, pFileData, aError\\);")
  4049. "json_parse_ex(&JsonSettings,
  4050. pFileData,
  4051. strlen(pFileData),
  4052. aError);")))
  4053. ;; Embed path to assets.
  4054. (substitute* "src/engine/shared/storage.cpp"
  4055. (("#define DATA_DIR.*")
  4056. (string-append "#define DATA_DIR \""
  4057. (assoc-ref outputs "out")
  4058. "/share/teeworlds/data"
  4059. "\"")))
  4060. ;; Bam expects all files to have a recent time stamp.
  4061. (for-each (cut utime <> 1 1)
  4062. (find-files "."))
  4063. ;; Do not use bundled libraries.
  4064. (substitute* "bam.lua"
  4065. (("local json = Compile.+$")
  4066. "local json = nil
  4067. settings.link.libs:Add(\"jsonparser\")")
  4068. (("local png = Compile.+$")
  4069. "local png = nil
  4070. settings.link.libs:Add(\"pnglite\")")
  4071. (("local wavpack = Compile.+$")
  4072. "local wavpack = nil
  4073. settings.link.libs:Add(\"wavpack\")")
  4074. (("if config\\.zlib\\.value == 1")
  4075. "if config.zlib.value"))
  4076. (substitute* "src/engine/client/graphics_threaded.cpp"
  4077. (("engine/external/pnglite/pnglite\\.h")
  4078. "pnglite.h"))
  4079. (substitute* "src/engine/client/sound.cpp"
  4080. (("engine/external/wavpack/wavpack\\.h")
  4081. "wavpack/wavpack.h"))
  4082. (for-each use-latest-json-parser
  4083. '("src/game/client/components/countryflags.cpp"
  4084. "src/game/client/components/menus_settings.cpp"
  4085. "src/game/client/components/skins.cpp"
  4086. "src/game/client/localization.cpp"
  4087. "src/game/editor/auto_map.h"
  4088. "src/game/editor/editor.cpp"))
  4089. #t))
  4090. (replace 'build
  4091. (lambda _
  4092. (invoke "bam" "-a" "-v" "conf=release")))
  4093. (replace 'install
  4094. (lambda* (#:key outputs #:allow-other-keys)
  4095. (let* ((arch ,(system->linux-architecture
  4096. (or (%current-target-system)
  4097. (%current-system))))
  4098. (build (string-append "build/" arch "/release/"))
  4099. (data-built (string-append build "data/"))
  4100. (out (assoc-ref outputs "out"))
  4101. (bin (string-append out "/bin/"))
  4102. (data (string-append out "/share/teeworlds/data/")))
  4103. (for-each (cut install-file <> bin)
  4104. (map (cut string-append build <>)
  4105. '("teeworlds" "teeworlds_srv")))
  4106. (copy-recursively data-built data)
  4107. #t))))))
  4108. (inputs
  4109. `(("freetype" ,freetype)
  4110. ("glu" ,glu)
  4111. ("json-parser" ,json-parser)
  4112. ("mesa" ,mesa)
  4113. ("pnglite" ,pnglite)
  4114. ("sdl2" ,sdl2)
  4115. ("sdl2-image" ,sdl2-image)
  4116. ("sdl2-mixer" ,sdl2-mixer)
  4117. ("wavpack" ,wavpack)
  4118. ("zlib" ,zlib)))
  4119. (native-inputs
  4120. `(("bam" ,bam)
  4121. ("python" ,python-wrapper)
  4122. ("pkg-config" ,pkg-config)))
  4123. (home-page "https://www.teeworlds.com")
  4124. (synopsis "2D retro multiplayer shooter game")
  4125. (description "Teeworlds is an online multiplayer game. Battle with up to
  4126. 16 players in a variety of game modes, including Team Deathmatch and Capture
  4127. The Flag. You can even design your own maps!")
  4128. (license license:bsd-3)))
  4129. (define-public enigma
  4130. (package
  4131. (name "enigma")
  4132. (version "1.21")
  4133. (source (origin
  4134. (method url-fetch)
  4135. (uri (string-append "mirror://sourceforge/enigma-game/"
  4136. "Release%20" version "/enigma-"
  4137. version ".tar.gz"))
  4138. (sha256
  4139. (base32
  4140. "00ffh9pypj1948pg3q9sjp1nmiabh52p5c8wpg9n1dcfgl3cywnq"))))
  4141. (build-system gnu-build-system)
  4142. (arguments
  4143. `(#:configure-flags
  4144. (list "--with-system-enet")
  4145. #:phases
  4146. (modify-phases %standard-phases
  4147. (add-after 'unpack 'find-sdl
  4148. (lambda _
  4149. (substitute* "configure"
  4150. (("SDL_ttf.h") "SDL/SDL_ttf.h"))
  4151. (substitute* '("tools/ttf2bmf.cc"
  4152. "lib-src/enigma-core/ecl_font.cc"
  4153. "lib-src/enigma-core/ecl_video.cc"
  4154. "lib-src/enigma-core/ecl_buffer.hh"
  4155. "src/SoundEngine.cc"
  4156. "src/SoundEngine.hh"
  4157. "src/MusicManager.cc"
  4158. "src/MusicManager.hh"
  4159. "src/d_models.cc"
  4160. "src/main.cc"
  4161. "src/network.cc")
  4162. (("#include \"SDL_(image|ttf|mixer|types|syswm|mutex).h\"" line header)
  4163. (string-append "#include \"SDL/SDL_" header ".h\"")))
  4164. (substitute* "src/main.cc"
  4165. (("#include <SDL_(image|ttf|mixer).h>" line header)
  4166. (string-append "#include \"SDL/SDL_" header ".h\"")))
  4167. #t)))))
  4168. (inputs
  4169. `(("xerces-c" ,xerces-c)
  4170. ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer sdl-ttf)))
  4171. ("curl" ,curl)
  4172. ("enet" ,enet)))
  4173. (native-inputs
  4174. `(("pkg-config" ,pkg-config)
  4175. ("imagemagick" ,imagemagick)))
  4176. (home-page "https://www.nongnu.org/enigma")
  4177. (synopsis "Puzzle game with a dexterity component")
  4178. (description "Enigma is a puzzle game with 550 unique levels. The object
  4179. of the game is to find and uncover pairs of identically colored ‘Oxyd’ stones.
  4180. Simple? Yes. Easy? Certainly not! Hidden traps, vast mazes, laser beams,
  4181. and most of all, countless hairy puzzles usually block your direct way to the
  4182. Oxyd stones. Enigma’s game objects (and there are hundreds of them, lest you
  4183. get bored) interact in many unexpected ways, and since many of them follow the
  4184. laws of physics (Enigma’s special laws of physics, that is), controlling them
  4185. with the mouse isn’t always trivial.")
  4186. (license license:gpl2+)))
  4187. (define-public chroma
  4188. (package
  4189. (name "chroma")
  4190. (version "1.16")
  4191. (source (origin
  4192. (method url-fetch)
  4193. (uri (string-append "http://level7.org.uk/chroma/download/chroma-"
  4194. version ".tar.bz2"))
  4195. (sha256
  4196. (base32
  4197. "1gfaw1kf7cxf5ibr61n6dxjihi49gmysn4cvawx1pqvy52ljpk0p"))))
  4198. (build-system gnu-build-system)
  4199. (arguments
  4200. `(#:tests? #f)) ; no tests included
  4201. (inputs
  4202. `(("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer sdl-ttf)))
  4203. ("freetype" ,freetype)
  4204. ("ncurses" ,ncurses)
  4205. ("fontconfig" ,fontconfig)
  4206. ("libxft" ,libxft)))
  4207. (native-inputs
  4208. `(("pkg-config" ,pkg-config)))
  4209. (home-page "http://level7.org.uk/chroma/")
  4210. (synopsis "Abstract puzzle game")
  4211. (description "Chroma is an abstract puzzle game. A variety of colourful
  4212. shapes are arranged in a series of increasingly complex patterns, forming
  4213. fiendish traps that must be disarmed and mysterious puzzles that must be
  4214. manipulated in order to give up their subtle secrets. Initially so
  4215. straightforward that anyone can pick it up and begin to play, yet gradually
  4216. becoming difficult enough to tax even the brightest of minds.")
  4217. (license license:gpl2+)))
  4218. (define-public fillets-ng
  4219. (package
  4220. (name "fillets-ng")
  4221. (version "1.0.1")
  4222. (source (origin
  4223. (method url-fetch)
  4224. (uri (string-append "mirror://sourceforge/fillets/"
  4225. "Fish%20Fillets%20-%20Next%20Generation/"
  4226. version "/fillets-ng-" version ".tar.gz"))
  4227. (sha256
  4228. (base32
  4229. "1nljp75aqqb35qq3x7abhs2kp69vjcj0h1vxcpdyn2yn2nalv6ij"))))
  4230. (build-system gnu-build-system)
  4231. (arguments
  4232. `(#:configure-flags
  4233. (list (string-append "--with-lua="
  4234. (assoc-ref %build-inputs "lua")))
  4235. #:make-flags
  4236. (list (string-append "CFLAGS=-I"
  4237. (assoc-ref %build-inputs "sdl-union")
  4238. "/include/SDL")
  4239. (string-append "CXXFLAGS=-I"
  4240. (assoc-ref %build-inputs "sdl-union")
  4241. "/include/SDL"))
  4242. #:phases
  4243. (modify-phases %standard-phases
  4244. ;; Lua 5.1 does not provide it.
  4245. (add-after 'unpack 'do-not-link-with-lualib
  4246. (lambda _
  4247. (substitute* "configure"
  4248. (("-llualib") ""))
  4249. #t))
  4250. (add-after 'install 'install-data
  4251. (lambda* (#:key inputs outputs #:allow-other-keys)
  4252. (let ((data (string-append (assoc-ref outputs "out")
  4253. "/share/games/fillets-ng")))
  4254. (mkdir-p data)
  4255. (invoke "tar" "-xvf"
  4256. (assoc-ref inputs "fillets-ng-data")
  4257. "--strip-components=1"
  4258. "-C" data)))))))
  4259. (inputs
  4260. `(("sdl-union" ,(sdl-union (list sdl
  4261. sdl-mixer
  4262. sdl-image
  4263. sdl-ttf)))
  4264. ("fribidi" ,fribidi)
  4265. ("libx11" ,libx11)
  4266. ("lua" ,lua-5.1)))
  4267. (native-inputs
  4268. `(("pkg-config" ,pkg-config)
  4269. ("fillets-ng-data"
  4270. ,(origin
  4271. (method url-fetch)
  4272. (uri (string-append "mirror://sourceforge/fillets/"
  4273. "Fish%20Fillets%20-%20Next%20Generation/"
  4274. version "/fillets-ng-data-" version ".tar.gz"))
  4275. (sha256
  4276. (base32
  4277. "169p0yqh2gxvhdilvjc2ld8aap7lv2nhkhkg4i1hlmgc6pxpkjgh"))))))
  4278. (home-page "http://fillets.sourceforge.net/")
  4279. (synopsis "Puzzle game")
  4280. (description "Fish Fillets NG is strictly a puzzle game. The goal in
  4281. every of the seventy levels is always the same: find a safe way out. The fish
  4282. utter witty remarks about their surroundings, the various inhabitants of their
  4283. underwater realm quarrel among themselves or comment on the efforts of your
  4284. fish. The whole game is accompanied by quiet, comforting music.")
  4285. (license license:gpl2+)))
  4286. (define-public crawl
  4287. (package
  4288. (name "crawl")
  4289. (version "0.22.1")
  4290. (source
  4291. (origin
  4292. (method url-fetch)
  4293. (uri (list
  4294. ;; Older releases get moved into a versioned directory
  4295. (string-append "http://crawl.develz.org/release/"
  4296. (version-major+minor version) "/stone_soup-"
  4297. version "-nodeps.tar.xz")
  4298. ;; Only the latest release is in this directory
  4299. (string-append "http://crawl.develz.org/release/stone_soup-"
  4300. version "-nodeps.tar.xz")))
  4301. (sha256
  4302. (base32
  4303. "1qc90wwbxvjzqq66n8kfr0a2ny7sfvv2n84si67jiv2887d0ws6k"))
  4304. (patches (search-patches "crawl-upgrade-saves.patch"))))
  4305. (build-system gnu-build-system)
  4306. (inputs
  4307. `(("lua51" ,lua-5.1)
  4308. ("ncurses" ,ncurses)
  4309. ("sqlite" ,sqlite)
  4310. ("zlib" ,zlib)))
  4311. (native-inputs
  4312. `(("bison" ,bison)
  4313. ("flex" ,flex)
  4314. ("perl" ,perl)
  4315. ("pkg-config" ,pkg-config)))
  4316. (arguments
  4317. '(#:make-flags
  4318. (let* ((sqlite (assoc-ref %build-inputs "sqlite"))
  4319. (out (assoc-ref %outputs "out")))
  4320. (list (string-append "SQLITE_INCLUDE_DIR=" sqlite "/include")
  4321. (string-append "prefix=" out)
  4322. "SAVEDIR=~/.crawl"
  4323. ;; don't build any bundled dependencies
  4324. "BUILD_LUA="
  4325. "BUILD_SQLITE="
  4326. "BUILD_ZLIB="
  4327. "-Csource"))
  4328. #:phases
  4329. (modify-phases %standard-phases
  4330. (delete 'configure)
  4331. (delete 'check)
  4332. ;; Test cases require the source to be rebuild with the -DDEBUG define.
  4333. ;; Do 'check before 'build to avoid a 3rd build on make install.
  4334. (add-before 'build 'check
  4335. (lambda* (#:key inputs outputs make-flags #:allow-other-keys)
  4336. (setenv "HOME" (getcwd))
  4337. ;; Fake a terminal for the test cases.
  4338. (setenv "TERM" "xterm-256color")
  4339. (apply invoke "make" "debug" "test"
  4340. (format #f "-j~d" (parallel-job-count))
  4341. ;; Force command line build for test cases.
  4342. (append make-flags '("GAME=crawl" "TILES="))))))))
  4343. (synopsis "Roguelike dungeon crawler game")
  4344. (description "Dungeon Crawl Stone Soup is a roguelike adventure through
  4345. dungeons filled with dangerous monsters in a quest to find the mystifyingly
  4346. fabulous Orb of Zot.")
  4347. (home-page "https://crawl.develz.org")
  4348. (license (list license:gpl2+
  4349. license:bsd-2
  4350. license:bsd-3
  4351. license:cc0
  4352. license:expat
  4353. license:zlib
  4354. license:asl2.0))))
  4355. ;; The linter here claims that patch file names should start with the package
  4356. ;; name. But, in this case, the patches are inherited from crawl with the
  4357. ;; "crawl-" prefix instead of "crawl-tiles-".
  4358. (define-public crawl-tiles
  4359. (package
  4360. (inherit crawl)
  4361. (name "crawl-tiles")
  4362. (arguments
  4363. (substitute-keyword-arguments
  4364. (package-arguments crawl)
  4365. ((#:make-flags flags)
  4366. `(let ((dejavu (assoc-ref %build-inputs "font-dejavu")))
  4367. (cons*
  4368. (string-append "PROPORTIONAL_FONT=" dejavu
  4369. "/share/fonts/truetype/DejaVuSans.ttf")
  4370. (string-append "MONOSPACED_FONT=" dejavu
  4371. "/share/fonts/truetype/DejaVuSansMono.ttf")
  4372. "TILES=y"
  4373. ;; Rename the executable to allow parallel installation with crawl.
  4374. "GAME=crawl-tiles"
  4375. ,flags)))))
  4376. (inputs
  4377. `(,@(package-inputs crawl)
  4378. ("font-dejavu" ,font-dejavu)
  4379. ("freetype6" ,freetype)
  4380. ("glu" ,glu)
  4381. ("libpng" ,libpng)
  4382. ("sdl2" ,sdl2)
  4383. ("sdl2-image" ,sdl2-image)
  4384. ("sdl2-mixer" ,sdl2-mixer)))
  4385. (native-inputs
  4386. `(,@(package-native-inputs crawl)
  4387. ("pngcrush" ,pngcrush)
  4388. ("which" ,which)))
  4389. (synopsis "Graphical roguelike dungeon crawler game")))
  4390. (define-public lugaru
  4391. (package
  4392. (name "lugaru")
  4393. (version "1.2")
  4394. (source (origin
  4395. (method url-fetch)
  4396. (uri (string-append "https://bitbucket.org/osslugaru/lugaru/downloads/"
  4397. name "-" version ".tar.xz"))
  4398. (sha256
  4399. (base32
  4400. "15zgcshy22q51rm72zi6y9z7qlgnz5iw3gczjdlir4bqmxy4gspk"))))
  4401. (build-system cmake-build-system)
  4402. (arguments
  4403. `(#:configure-flags
  4404. (list "-DSYSTEM_INSTALL=ON")
  4405. ;; no test target
  4406. #:tests? #f))
  4407. (native-inputs
  4408. `(("pkg-config" ,pkg-config)))
  4409. (inputs
  4410. `(("sdl2" ,sdl2)
  4411. ("glu" ,glu)
  4412. ("libjpeg" ,libjpeg-turbo)
  4413. ("libpng" ,libpng)
  4414. ("openal" ,openal)
  4415. ("vorbis" ,libvorbis)
  4416. ("zlib" ,zlib)))
  4417. (home-page "https://osslugaru.gitlab.io")
  4418. (synopsis "Cross-platform third-person action game")
  4419. (description "Lugaru is a third-person action game. The main character,
  4420. Turner, is an anthropomorphic rebel bunny rabbit with impressive combat skills.
  4421. In his quest to find those responsible for slaughtering his village, he uncovers
  4422. a far-reaching conspiracy involving the corrupt leaders of the rabbit republic
  4423. and the starving wolves from a nearby den. Turner takes it upon himself to
  4424. fight against their plot and save his fellow rabbits from slavery.")
  4425. (license (list license:gpl2+ ; code
  4426. ;; assets:
  4427. license:cc-by-sa3.0
  4428. license:cc-by-sa4.0))))
  4429. (define-public 0ad-data
  4430. (package
  4431. (name "0ad-data")
  4432. (version "0.0.23b-alpha")
  4433. (source
  4434. (origin
  4435. (method url-fetch)
  4436. (uri (string-append "https://releases.wildfiregames.com/0ad-"
  4437. version "-unix-data.tar.xz"))
  4438. (file-name (string-append name "-" version ".tar.xz"))
  4439. (sha256
  4440. (base32
  4441. "04x7729hk6zw1xj3n4s4lvaviijsnbjf5rhzvjxlr5fygvg4l6z1"))
  4442. (modules '((guix build utils)))
  4443. (snippet
  4444. #~(begin
  4445. (for-each (lambda (name)
  4446. (let* ((dir (string-append "binaries/data/mods/" name))
  4447. (file (string-append dir "/" name ".zip"))
  4448. (unzip #$(file-append unzip "/bin/unzip")))
  4449. (invoke unzip "-d" dir file)
  4450. (delete-file file)))
  4451. '("mod" "public"))
  4452. #t))))
  4453. (build-system trivial-build-system)
  4454. (native-inputs `(("tar" ,tar)
  4455. ("xz" ,xz)))
  4456. (arguments
  4457. `(#:modules ((guix build utils))
  4458. #:builder
  4459. (begin
  4460. (use-modules (guix build utils))
  4461. (let ((out (assoc-ref %outputs "out"))
  4462. (source (assoc-ref %build-inputs "source"))
  4463. (tar (string-append (assoc-ref %build-inputs "tar") "/bin/tar"))
  4464. (xz-path (string-append (assoc-ref %build-inputs "xz") "/bin")))
  4465. (setenv "PATH" xz-path)
  4466. (mkdir out)
  4467. (invoke tar "xvf" source "-C" out "--strip=3")))))
  4468. (synopsis "Data files for 0ad")
  4469. (description "0ad-data provides the data files required by the game 0ad.")
  4470. (home-page "https://play0ad.com")
  4471. (license (list (license:fsdg-compatible
  4472. "http://tavmjong.free.fr/FONTS/ArevCopyright.txt"
  4473. (license:license-comment
  4474. (package-license font-bitstream-vera)))
  4475. (package-license font-bitstream-vera)
  4476. license:cc-by-sa3.0
  4477. license:expat
  4478. license:gfl1.0
  4479. license:gpl2+
  4480. license:gpl3+))))
  4481. (define-public 0ad
  4482. (package
  4483. (name "0ad")
  4484. (version "0.0.23b-alpha")
  4485. (source
  4486. (origin
  4487. (method url-fetch)
  4488. (uri (string-append "https://releases.wildfiregames.com/0ad-"
  4489. version "-unix-build.tar.xz"))
  4490. (file-name (string-append name "-" version ".tar.xz"))
  4491. (sha256
  4492. (base32
  4493. "0draa53xg69i5qhqym85658m45xhwkbiimaldj4sr3703rjgggq1"))))
  4494. ;; A snippet here would cause a build failure because of timestamps
  4495. ;; reset. See https://bugs.gnu.org/26734.
  4496. (inputs
  4497. `(("0ad-data" ,0ad-data)
  4498. ("curl" ,curl)
  4499. ("enet" ,enet)
  4500. ("gloox" ,gloox)
  4501. ("icu4c" ,icu4c)
  4502. ("libpng" ,libpng)
  4503. ("libsodium" ,libsodium)
  4504. ("libvorbis" ,libvorbis)
  4505. ("libxcursor" ,libxcursor)
  4506. ("libxml2" ,libxml2)
  4507. ("miniupnpc" ,miniupnpc)
  4508. ("mozjs-38" ,mozjs-38)
  4509. ("openal" ,openal)
  4510. ("sdl2" ,sdl2)
  4511. ("wxwidgets" ,wxwidgets)
  4512. ("zlib" ,zlib)))
  4513. (native-inputs
  4514. `(("boost" ,boost)
  4515. ("cmake" ,cmake)
  4516. ("mesa" ,mesa)
  4517. ("pkg-config" ,pkg-config)
  4518. ("python-2" ,python-2)))
  4519. (build-system gnu-build-system)
  4520. (arguments
  4521. `(#:make-flags '("config=release" "verbose=1" "-C" "build/workspaces/gcc")
  4522. #:phases
  4523. (modify-phases %standard-phases
  4524. (add-after 'unpack 'delete-bundles
  4525. (lambda _
  4526. (delete-file-recursively "libraries/source/spidermonkey")
  4527. #t))
  4528. (add-after 'unpack 'fix-x11-includes
  4529. (lambda _
  4530. (substitute* "source/lib/sysdep/os/unix/x/x.cpp"
  4531. (("<Xlib.h>") "<X11/Xlib.h>"))
  4532. (substitute* "source/lib/sysdep/os/unix/x/x.cpp"
  4533. (("<Xatom.h>") "<X11/Xatom.h>"))
  4534. (substitute* "source/lib/sysdep/os/unix/x/x.cpp"
  4535. (("<Xcursor/Xcursor.h>") "<X11/Xcursor/Xcursor.h>"))
  4536. #t))
  4537. (replace 'configure
  4538. (lambda* (#:key inputs outputs #:allow-other-keys)
  4539. (let* ((jobs (number->string (parallel-job-count)))
  4540. (out (assoc-ref outputs "out"))
  4541. (lib (string-append out "/lib"))
  4542. (data (string-append out "/share/0ad")))
  4543. (setenv "JOBS" (string-append "-j" jobs))
  4544. (setenv "CC" "gcc")
  4545. (with-directory-excursion "build/workspaces"
  4546. (zero? (system* "./update-workspaces.sh"
  4547. (string-append "--libdir=" lib)
  4548. (string-append "--datadir=" data)
  4549. ;; TODO: "--with-system-nvtt"
  4550. "--with-system-mozjs38"))))))
  4551. (delete 'check)
  4552. (replace 'install
  4553. (lambda* (#:key inputs outputs #:allow-other-keys)
  4554. (chdir "binaries")
  4555. (let* ((out (assoc-ref outputs "out"))
  4556. (bin (string-append out "/bin"))
  4557. (lib (string-append out "/lib"))
  4558. (data (string-append out "/share/0ad"))
  4559. (applications (string-append out "/share/applications"))
  4560. (pixmaps (string-append out "/share/pixmaps"))
  4561. (0ad-data (assoc-ref inputs "0ad-data")))
  4562. ;; data
  4563. (copy-recursively "data" data)
  4564. (for-each (lambda (file)
  4565. (symlink (string-append 0ad-data "/" file)
  4566. (string-append data "/" file)))
  4567. '("config" "mods/mod" "mods/public" "tools"))
  4568. ;; libraries
  4569. (for-each (lambda (file)
  4570. (install-file file lib))
  4571. (find-files "system" "\\.so$"))
  4572. ;; binaries
  4573. (install-file "system/pyrogenesis" bin)
  4574. (with-directory-excursion bin
  4575. (symlink "pyrogenesis" "0ad"))
  4576. ;; resources
  4577. (with-directory-excursion "../build/resources"
  4578. (install-file "0ad.desktop" applications)
  4579. (install-file "0ad.png" pixmaps))
  4580. #t)))
  4581. (add-after 'install 'check
  4582. (lambda _
  4583. (with-directory-excursion "system"
  4584. (zero? (system* "./test"))))))))
  4585. (home-page "https://play0ad.com")
  4586. (synopsis "3D real-time strategy game of ancient warfare")
  4587. (description "0 A.D. is a real-time strategy (RTS) game of ancient
  4588. warfare. It's a historically-based war/economy game that allows players to
  4589. relive or rewrite the history of twelve ancient civilizations, each depicted
  4590. at their peak of economic growth and military prowess.
  4591. 0ad needs a window manager that supports 'Extended Window Manager Hints'.")
  4592. (license (list license:bsd-2
  4593. license:bsd-3
  4594. license:expat
  4595. license:gpl2+
  4596. license:ibmpl1.0
  4597. license:isc
  4598. license:lgpl2.1
  4599. license:lgpl3
  4600. license:mpl2.0
  4601. license:zlib))))
  4602. ;; There have been no official releases.
  4603. (define-public open-adventure
  4604. (let* ((commit "d43854f0f6bb8e9eea7fbce80348150e7e7fc34d")
  4605. (revision "2"))
  4606. (package
  4607. (name "open-adventure")
  4608. (version (string-append "2.5-" revision "." (string-take commit 7)))
  4609. (source (origin
  4610. (method git-fetch)
  4611. (uri (git-reference
  4612. (url "https://gitlab.com/esr/open-adventure")
  4613. (commit commit)))
  4614. (file-name (string-append name "-" version "-checkout"))
  4615. (sha256
  4616. (base32
  4617. "08bwrvf4axb1rsfd6ia1fddsky9pc1p350vjskhaakg2czc6dsk0"))))
  4618. (build-system gnu-build-system)
  4619. (arguments
  4620. `(#:make-flags (list "CC=gcc")
  4621. #:parallel-build? #f ; not supported
  4622. #:phases
  4623. (modify-phases %standard-phases
  4624. (replace 'configure
  4625. (lambda* (#:key inputs outputs #:allow-other-keys)
  4626. ;; Linenoise is meant to be included, so we have to
  4627. ;; copy it into the working directory.
  4628. (let* ((linenoise (assoc-ref inputs "linenoise"))
  4629. (noisepath (string-append linenoise "/include/linenoise"))
  4630. (out (assoc-ref outputs "out")))
  4631. (copy-recursively noisepath "linenoise"))
  4632. #t))
  4633. (add-before 'build 'use-echo
  4634. (lambda _
  4635. (substitute* "tests/Makefile"
  4636. (("/bin/echo") (which "echo")))
  4637. #t))
  4638. (add-after 'build 'build-manpage
  4639. (lambda _
  4640. ;; This target is missing a dependency
  4641. (substitute* "Makefile"
  4642. ((".adoc.6:" line)
  4643. (string-append line " advent.adoc")))
  4644. (zero? (system* "make" ".adoc.6"))))
  4645. ;; There is no install target
  4646. (replace 'install
  4647. (lambda* (#:key outputs #:allow-other-keys)
  4648. (let* ((out (assoc-ref outputs "out"))
  4649. (bin (string-append out "/bin"))
  4650. (man (string-append out "/share/man/man6")))
  4651. (install-file "advent" bin)
  4652. (install-file "advent.6" man))
  4653. #t)))))
  4654. (native-inputs
  4655. `(("asciidoc" ,asciidoc)
  4656. ("linenoise" ,linenoise)
  4657. ("python" ,python)
  4658. ("python-pyyaml" ,python-pyyaml)))
  4659. (home-page "https://gitlab.com/esr/open-adventure")
  4660. (synopsis "Colossal Cave Adventure")
  4661. (description "The original Colossal Cave Adventure from 1976 was the
  4662. origin of all text adventures, dungeon-crawl (computer) games, and
  4663. computer-hosted roleplaying games. This is the last version released by
  4664. Crowther & Woods, its original authors, in 1995. It has been known as
  4665. \"adventure 2.5\" and \"430-point adventure\".")
  4666. (license license:bsd-2))))
  4667. (define-public tome4
  4668. (package
  4669. (name "tome4")
  4670. (version "1.5.10")
  4671. (synopsis "Single-player, RPG roguelike game set in the world of Eyal")
  4672. (source
  4673. (origin
  4674. (method url-fetch)
  4675. (uri (string-append "https://te4.org/dl/t-engine/t-engine4-src-"
  4676. version ".tar.bz2"))
  4677. (sha256
  4678. (base32
  4679. "0mc5dgh2x9nbili7gy6srjhb23ckalf08wqq2amyjr5rq392jvd7"))
  4680. (modules '((guix build utils)))
  4681. (snippet
  4682. '(begin
  4683. (substitute* '("src/music.h" "src/tSDL.h")
  4684. (("#elif defined(__FreeBSD__)" line)
  4685. (string-append
  4686. line " || defined(__GNUC__)")))
  4687. #t))))
  4688. (build-system gnu-build-system)
  4689. (native-inputs
  4690. `(("unzip" ,unzip)))
  4691. (inputs
  4692. `(("sdl-union" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))
  4693. ("glu" ,glu)
  4694. ("premake4" ,premake4)
  4695. ("openal" ,openal)
  4696. ("vorbis" ,libvorbis)
  4697. ("luajit" ,luajit)))
  4698. (arguments
  4699. `(#:make-flags '("CC=gcc" "config=release")
  4700. #:phases (modify-phases %standard-phases
  4701. (delete 'bootstrap)
  4702. (replace 'configure
  4703. (lambda _
  4704. (invoke "premake4" "gmake")
  4705. #t))
  4706. (add-after 'set-paths 'set-sdl-paths
  4707. (lambda* (#:key inputs #:allow-other-keys)
  4708. (setenv "CPATH"
  4709. (string-append (assoc-ref inputs "sdl-union")
  4710. "/include/SDL2"))
  4711. #t))
  4712. (delete 'check)
  4713. ;; premake doesn't provide install target
  4714. (replace 'install
  4715. (lambda* (#:key inputs outputs #:allow-other-keys)
  4716. (let* ((out (assoc-ref outputs "out"))
  4717. (usr (string-append out "/usr"))
  4718. (bin (string-append out "/bin"))
  4719. (licenses (string-append out "/share/licenses"))
  4720. (documents (string-append out "/share/doc"))
  4721. (pixmaps (string-append out "/share/pixmaps"))
  4722. (icon "te4-icon.png")
  4723. (data (string-append out "/share/" ,name))
  4724. (applications (string-append
  4725. out "/share/applications"))
  4726. (unzip (string-append
  4727. (assoc-ref inputs "unzip") "/bin/unzip"))
  4728. (wrapper (string-append bin "/" ,name)))
  4729. ;; icon
  4730. (mkdir-p pixmaps)
  4731. (system* unzip "-j"
  4732. (string-append
  4733. "game/engines/te4-" ,version ".teae")
  4734. (string-append
  4735. "data/gfx/" icon) "-d" pixmaps)
  4736. ;; game executable
  4737. (install-file "t-engine" data)
  4738. (mkdir-p bin)
  4739. (with-output-to-file wrapper
  4740. (lambda ()
  4741. (display
  4742. (string-append
  4743. "#!/bin/sh\n"
  4744. ;; No bootstrap code found,
  4745. ;; defaulting to working directory
  4746. ;; for engine code!
  4747. "cd " data "\n"
  4748. "exec -a tome4 ./t-engine \"$@\"\n"))))
  4749. (chmod wrapper #o555)
  4750. ;; licenses
  4751. (for-each (lambda (file)
  4752. (install-file file licenses))
  4753. '("COPYING" "COPYING-MEDIA"))
  4754. ;; documents
  4755. (for-each (lambda (file)
  4756. (install-file file documents))
  4757. '("CONTRIBUTING" "CREDITS"))
  4758. ;; data
  4759. (copy-recursively "bootstrap" (string-append
  4760. data "/bootstrap"))
  4761. (copy-recursively "game" (string-append data "/game"))
  4762. ;; launcher
  4763. (mkdir-p applications)
  4764. (with-output-to-file (string-append applications "/"
  4765. ,name ".desktop")
  4766. (lambda ()
  4767. (display
  4768. (string-append
  4769. "[Desktop Entry]
  4770. Name=ToME4
  4771. Comment=" ,synopsis "\n"
  4772. "Exec=" ,name "\n"
  4773. "Icon=" icon "\n"
  4774. "Terminal=false
  4775. Type=Application
  4776. Categories=Game;RolePlaying;\n")))))
  4777. #t)))))
  4778. (home-page "https://te4.org")
  4779. (description "Tales of Maj’Eyal (ToME) RPG, featuring tactical turn-based
  4780. combat and advanced character building. Play as one of many unique races and
  4781. classes in the lore-filled world of Eyal, exploring random dungeons, facing
  4782. challenging battles, and developing characters with your own tailored mix of
  4783. abilities and powers. With a modern graphical and customisable interface,
  4784. intuitive mouse control, streamlined mechanics and deep, challenging combat,
  4785. Tales of Maj’Eyal offers engaging roguelike gameplay for the 21st century.")
  4786. (license license:gpl3+)))
  4787. (define-public quakespasm
  4788. (package
  4789. (name "quakespasm")
  4790. (version "0.93.1")
  4791. (source
  4792. (origin
  4793. (method url-fetch)
  4794. (uri (string-append "mirror://sourceforge/quakespasm/Source/quakespasm-"
  4795. version ".tgz"))
  4796. (sha256
  4797. (base32
  4798. "1bimv18f6rzhyjz78yvw2vqr5n0kdqbcqmq7cb3m951xgsxfcgpd"))))
  4799. (arguments
  4800. `(#:tests? #f
  4801. #:make-flags '("CC=gcc"
  4802. "MP3LIB=mpg123"
  4803. "USE_CODEC_FLAC=1"
  4804. "USE_CODEC_MIKMOD=1"
  4805. "USE_SDL2=1"
  4806. "-CQuake")
  4807. #:phases (modify-phases %standard-phases
  4808. (delete 'configure)
  4809. (add-after 'unpack 'fix-makefile-paths
  4810. (lambda* (#:key outputs #:allow-other-keys)
  4811. (let ((out (assoc-ref outputs "out")))
  4812. (mkdir-p (string-append out "/bin"))
  4813. (substitute* "Quake/Makefile"
  4814. (("/usr/local/games")
  4815. (string-append out "/bin")))
  4816. #t))))))
  4817. (build-system gnu-build-system)
  4818. (inputs `(("libmikmod" ,libmikmod)
  4819. ("libvorbis" ,libvorbis)
  4820. ("flac" ,flac)
  4821. ("mesa" ,mesa)
  4822. ("mpg123" ,mpg123)
  4823. ("sdl2" ,sdl2)))
  4824. (synopsis "First person shooter engine for Quake 1")
  4825. (description "Quakespasm is a modern engine for id software's Quake 1.
  4826. It includes support for 64 bit CPUs, custom music playback, a new sound driver,
  4827. some graphical niceities, and numerous bug-fixes and other improvements.")
  4828. (home-page "http://quakespasm.sourceforge.net/")
  4829. (license license:gpl2+)))
  4830. (define-public vkquake
  4831. (package
  4832. (inherit quakespasm)
  4833. (name "vkquake")
  4834. (version "1.01.0")
  4835. (source
  4836. (origin
  4837. (method git-fetch)
  4838. (uri (git-reference
  4839. (url "https://github.com/Novum/vkQuake.git")
  4840. (commit version)))
  4841. (file-name (git-file-name name version))
  4842. (sha256
  4843. (base32 "1iwin8j5kbyrknbkhjgpy8nmm7pxqzr0daa9gn7p38qhg2mh0a39"))))
  4844. (arguments
  4845. `(#:make-flags
  4846. (let ((vulkanlib (string-append (assoc-ref %build-inputs
  4847. "vulkan-loader") "/lib")))
  4848. (list "CC=gcc"
  4849. "MP3LIB=mpg123"
  4850. "USE_CODEC_FLAC=1"
  4851. "USE_CODEC_MIKMOD=1"
  4852. "USE_SDL2=1"
  4853. (string-append "LDFLAGS=-Wl,-rpath=" vulkanlib)
  4854. "-CQuake"))
  4855. #:phases (modify-phases %standard-phases
  4856. (delete 'configure)
  4857. (add-after 'unpack 'fix-makefile-paths
  4858. (lambda* (#:key outputs #:allow-other-keys)
  4859. (let ((vulkan (assoc-ref %build-inputs
  4860. "vulkan-loader"))
  4861. (out (assoc-ref outputs "out")))
  4862. (mkdir-p (string-append out "/bin"))
  4863. (substitute* "Quake/Makefile" ((" /usr")
  4864. (string-append " " out)))
  4865. (substitute* "Quake/Makefile" (("/games")
  4866. (string-append "/bin")))
  4867. (substitute* "Quake/Makefile" (("..VULKAN_SDK.") vulkan))
  4868. #t))))
  4869. ,@(strip-keyword-arguments '(#:make-flags #:phases)
  4870. (package-arguments quakespasm))))
  4871. (inputs `(("vulkan-headers" ,vulkan-headers)
  4872. ("vulkan-loader" ,vulkan-loader)
  4873. ,@(package-inputs quakespasm)))
  4874. (description "vkquake is a modern engine for id software's Quake 1.
  4875. It includes support for 64 bit CPUs, custom music playback, a new sound driver,
  4876. some graphical niceities, and numerous bug-fixes and other improvements.")
  4877. (home-page "https://github.com/Novum/vkQuake")))
  4878. (define-public yamagi-quake2
  4879. (package
  4880. (name "yamagi-quake2")
  4881. (version "7.10")
  4882. (source
  4883. (origin
  4884. (method url-fetch)
  4885. (uri (string-append "https://deponie.yamagi.org/quake2/quake2-"
  4886. version ".tar.xz"))
  4887. (sha256
  4888. (base32
  4889. "0psinbg25mysd58k99s1n34w31w5hj1vppb39gdjb0zqi6sl6cps"))))
  4890. (build-system gnu-build-system)
  4891. (arguments
  4892. `(#:tests? #f
  4893. #:make-flags
  4894. (list "CC=gcc"
  4895. ;; link openAL instead of using dlopen at runtime
  4896. "DLOPEN_OPENAL=\"no\""
  4897. ;; an optional directory where it will look for quake2 data files
  4898. ;; in addition to the current working directory
  4899. "WITH_SYSTEMWIDE=yes"
  4900. "WITH_SYSTEMDIR=\"/opt/quake2\"")
  4901. #:phases
  4902. (modify-phases %standard-phases
  4903. (delete 'configure)
  4904. (replace 'install
  4905. (lambda* (#:key outputs #:allow-other-keys)
  4906. (let ((out (assoc-ref outputs "out")))
  4907. (mkdir-p (string-append out "/lib"))
  4908. (mkdir-p (string-append out "/bin"))
  4909. ;; The yamagi-quake2 binary must be in the same directory
  4910. ;; as it's engine libraries, but symlinking it to /bin is okay
  4911. ;; https://github.com/yquake2/yquake2/blob/master/stuff/packaging.md
  4912. (copy-recursively "release"
  4913. (string-append out "/lib/yamagi-quake2"))
  4914. (symlink (string-append out "/lib/yamagi-quake2/quake2")
  4915. (string-append out "/bin/yamagi-quake2"))
  4916. (symlink (string-append out "/lib/yamagi-quake2/q2ded")
  4917. (string-append out "/bin/yamagi-q2ded"))))))))
  4918. (inputs `(("sdl2" ,sdl2)
  4919. ("mesa" ,mesa)
  4920. ("libvorbis" ,libvorbis)
  4921. ("zlib" ,zlib)
  4922. ("openal" ,openal)))
  4923. (native-inputs `(("pkg-config" ,pkg-config)))
  4924. (synopsis "First person shooter engine based on quake2")
  4925. (description "Yamagi Quake II is an enhanced client for id Software's Quake II.
  4926. The main focus is an unchanged single player experience like back in 1997,
  4927. thus the gameplay and the graphics are unaltered. However the user may use one
  4928. of the unofficial retexturing packs. In comparison with the official client,
  4929. over 1000 bugs were fixed and an extensive code audit done,
  4930. making Yamagi Quake II one of the most solid Quake II implementations available.")
  4931. (home-page "https://www.yamagi.org/quake2/")
  4932. (license (list license:gpl2+ ; game and server
  4933. (license:non-copyleft ; info-zip
  4934. "file://LICENSE"
  4935. "See Info-Zip section.")
  4936. license:public-domain)))) ; stb
  4937. (define-public nudoku
  4938. (package
  4939. (name "nudoku")
  4940. (version "1.0.0")
  4941. (source (origin
  4942. (method url-fetch)
  4943. (uri (string-append "https://github.com/jubalh/nudoku/"
  4944. "releases/download/" version
  4945. "/nudoku-" version ".tar.xz"))
  4946. (sha256
  4947. (base32
  4948. "0nr2j2z07nxk70s8xnmmpzccxicf7kn5mbwby2kg6aq8paarjm8k"))))
  4949. (build-system gnu-build-system)
  4950. (inputs `(("ncurses" ,ncurses)))
  4951. (home-page "https://jubalh.github.io/nudoku/")
  4952. (synopsis "Sudoku for your terminal")
  4953. (description "Nudoku is a ncurses-based Sudoku game for your terminal.")
  4954. (license license:gpl3+)))
  4955. (define-public the-butterfly-effect
  4956. (package
  4957. (name "the-butterfly-effect")
  4958. (version "0.9.3.1")
  4959. (source
  4960. (origin
  4961. (method url-fetch)
  4962. (uri (string-append
  4963. "https://github.com/the-butterfly-effect/tbe/archive/"
  4964. "v" version ".tar.gz"))
  4965. (file-name (string-append name "-" version ".tar.gz"))
  4966. (sha256
  4967. (base32
  4968. "18qkp7fgdvyl3haqqa693mgyic7afsznsxgz98z9wn4csaqxsnby"))))
  4969. (build-system gnu-build-system)
  4970. (arguments
  4971. `(#:phases
  4972. (modify-phases %standard-phases
  4973. (delete 'configure)
  4974. ;; There is no "install" phase. By default, tbe is installed
  4975. ;; in the build directory. Provide our own installation.
  4976. (replace 'install
  4977. (lambda* (#:key outputs #:allow-other-keys)
  4978. (let* ((out (assoc-ref outputs "out"))
  4979. (bin (string-append out "/bin"))
  4980. (share (string-append out "/share")))
  4981. (install-file "usr/games/tbe" bin)
  4982. (mkdir-p share)
  4983. (copy-recursively "usr/share" share)
  4984. #t))))
  4985. ;; Test suite requires a running Xorg server. Even when
  4986. ;; provided, it fails with "D-Bus library appears to be
  4987. ;; incorrectly set up; failed to read machine uuid: Failed to
  4988. ;; open "/etc/machine-id": No such file or directory" along
  4989. ;; with multiple "QPainter:: ... Painter not active" warnings.
  4990. #:tests? #f))
  4991. (inputs
  4992. `(("qtbase" ,qtbase)
  4993. ("qtsvg" ,qtsvg)))
  4994. (native-inputs
  4995. `(("cmake" ,cmake)
  4996. ("gettext-minimal" ,gettext-minimal)
  4997. ("qttools" ,qttools)))
  4998. (synopsis "Realistic physics puzzle game")
  4999. (description "The Butterfly Effect (tbe) is a game that uses
  5000. realistic physics simulations to combine lots of simple mechanical
  5001. elements to achieve a simple goal in the most complex way possible.")
  5002. (home-page "http://the-butterfly-effect.org/")
  5003. ;; Main license is GPL2-only. However, artwork is distributed
  5004. ;; under various licenses, listed here.
  5005. (license (list license:gpl2 license:public-domain license:expat
  5006. license:cc-by-sa3.0 license:gpl3+ license:wtfpl2))))
  5007. (define-public pioneer
  5008. (package
  5009. (name "pioneer")
  5010. (version "20180203")
  5011. (source (origin
  5012. (method git-fetch)
  5013. (uri (git-reference
  5014. (url "https://github.com/pioneerspacesim/pioneer.git")
  5015. (commit version)))
  5016. (file-name (git-file-name name version))
  5017. (sha256
  5018. (base32
  5019. "0hp2mf36kj2v93hka8m8lxw2qhmnjc62wjlpw7c7ix0r8xa01i6h"))))
  5020. (build-system gnu-build-system)
  5021. (native-inputs
  5022. `(("autoconf" ,autoconf)
  5023. ("automake" ,automake)
  5024. ("pkg-config" ,pkg-config)))
  5025. (inputs
  5026. `(("assimp" ,assimp)
  5027. ("curl" ,curl)
  5028. ("freetype" ,freetype)
  5029. ("glu" ,glu)
  5030. ("libpng" ,libpng)
  5031. ("libsigc++" ,libsigc++)
  5032. ("libvorbis" ,libvorbis)
  5033. ("lua" ,lua-5.2) ;not compatible with 5.3
  5034. ("mesa" ,mesa)
  5035. ("sdl" ,(sdl-union (list sdl2 sdl2-image)))))
  5036. (arguments
  5037. `(#:tests? #f ;tests are broken
  5038. #:configure-flags (list "--with-external-liblua"
  5039. (string-append "PIONEER_DATA_DIR="
  5040. %output "/share/games/pioneer"))
  5041. #:phases (modify-phases %standard-phases
  5042. (add-before 'bootstrap 'fix-lua-check
  5043. (lambda _
  5044. (substitute* "configure.ac"
  5045. (("lua5.2")
  5046. (string-append "lua-" ,(version-major+minor
  5047. (package-version lua-5.2))))))))))
  5048. (home-page "http://pioneerspacesim.net")
  5049. (synopsis "Game of lonely space adventure")
  5050. (description
  5051. "Pioneer is a space adventure game set in our galaxy at the turn of the
  5052. 31st century. The game is open-ended, and you are free to eke out whatever
  5053. kind of space-faring existence you can think of. Look for fame or fortune by
  5054. exploring the millions of star systems. Turn to a life of crime as a pirate,
  5055. smuggler or bounty hunter. Forge and break alliances with the various
  5056. factions fighting for power, freedom or self-determination. The universe is
  5057. whatever you make of it.")
  5058. (license license:gpl3)))
  5059. (define-public badass
  5060. (let ((commit "3c3cd669b4fc8f73a102e3702788f7b28dc47dbb")
  5061. (revision "0"))
  5062. (package
  5063. (name "badass")
  5064. (version (git-version "0.0" revision commit))
  5065. (source (origin
  5066. (method git-fetch)
  5067. (uri (git-reference
  5068. (url "https://github.com/umayr/badass.git")
  5069. (commit commit)))
  5070. (file-name (git-file-name name version))
  5071. (sha256
  5072. (base32
  5073. "05c9vdcb5ym3z0n5ll3v39mw4yl9jcjnlydmn0yl89ai9pv71zb6"))))
  5074. (build-system go-build-system)
  5075. (arguments
  5076. '(#:import-path "github.com/umayr/badass"))
  5077. (synopsis "Hacking contribution graphs in git")
  5078. (description
  5079. "Badass generates false commits for a range of dates, essentially
  5080. hacking the gamification of contribution graphs on platforms such as
  5081. Github or Gitlab.")
  5082. (home-page "https://github.com/umayr/badass")
  5083. (license license:expat))))
  5084. (define-public colobot
  5085. (package
  5086. (name "colobot")
  5087. (version "0.1.11.1-alpha")
  5088. (source
  5089. (origin
  5090. (method url-fetch)
  5091. (uri (string-append "https://github.com/colobot/colobot/archive/"
  5092. "colobot-gold-" version ".tar.gz"))
  5093. (sha256
  5094. (base32
  5095. "0h6f4icarramhjkxxbzz6siv3v11z5r8ghqisgr1rscw217vhmwf"))))
  5096. (build-system cmake-build-system)
  5097. (arguments
  5098. `(#:tests? #f ;no test
  5099. #:phases
  5100. (modify-phases %standard-phases
  5101. (add-after 'unpack 'unpack-data
  5102. (lambda* (#:key inputs #:allow-other-keys)
  5103. (let ((data (assoc-ref inputs "colobot-data")))
  5104. (invoke "tar" "-xvf" data "-Cdata" "--strip-components=1")
  5105. #t)))
  5106. (add-after 'unpack-data 'install-music
  5107. (lambda* (#:key inputs #:allow-other-keys)
  5108. ;; Installation process tries to download music files using
  5109. ;; "wget" if not already present. Since we are going to install
  5110. ;; them, skip "wget" command check.
  5111. (substitute* "data/music/CMakeLists.txt"
  5112. (("find_program\\(WGET wget\\)") ""))
  5113. ;; Effectively install music.
  5114. (let ((data (assoc-ref inputs "colobot-music")))
  5115. (invoke "tar" "-xvf" data "-Cdata/music")
  5116. #t)))
  5117. (add-after 'install 'fix-install-directory
  5118. ;; Move binary from "games/" to "bin/".
  5119. (lambda* (#:key outputs #:allow-other-keys)
  5120. (let ((out (assoc-ref outputs "out")))
  5121. (rename-file (string-append out "/games")
  5122. (string-append out "/bin"))
  5123. #t))))))
  5124. (native-inputs
  5125. `(("colobot-data"
  5126. ,(origin
  5127. (method url-fetch)
  5128. (uri (string-append
  5129. "https://github.com/colobot/colobot-data/archive/"
  5130. "colobot-gold-" version ".tar.gz"))
  5131. (sha256
  5132. (base32
  5133. "0riznycx2jbxmg4m9nn3mcpqws2c0s7cn2m9skz9zj1w39r5qpjy"))))
  5134. ("colobot-music"
  5135. ,(origin
  5136. (method url-fetch)
  5137. (uri (string-append "https://colobot.info/files/music/"
  5138. "colobot-music_ogg_" version ".tar.gz"))
  5139. (sha256
  5140. (base32
  5141. "1s86cd36rwkff329mb1ay1wi5qqyi35564ppgr3f4qqz9wj9vs2m"))))
  5142. ("gettext" ,gettext-minimal)
  5143. ("librsvg" ,librsvg)
  5144. ("po4a" ,po4a)
  5145. ("python" ,python-wrapper)))
  5146. (inputs
  5147. `(("boost" ,boost)
  5148. ("glew" ,glew)
  5149. ("libogg" ,libogg)
  5150. ("libpng" ,libpng)
  5151. ("libsndfile" ,libsndfile)
  5152. ("libvorbis" ,libvorbis)
  5153. ("openal" ,openal)
  5154. ("physfs" ,physfs)
  5155. ("sdl" ,(sdl-union (list sdl2 sdl2-image sdl2-ttf)))))
  5156. (synopsis "Educational programming strategy game")
  5157. (description "Colobot: Gold Edition is a real-time strategy game, where
  5158. you can program your units (bots) in a language called CBOT, which is similar
  5159. to C++ and Java. Your mission is to find a new planet to live and survive.
  5160. You can save humanity and get programming skills!")
  5161. (home-page "https://colobot.info")
  5162. (license license:gpl3+)))
  5163. (define-public gzdoom
  5164. (package
  5165. (name "gzdoom")
  5166. (version "3.3.0")
  5167. (source (origin
  5168. (method url-fetch)
  5169. (uri
  5170. (string-append "https://zdoom.org/files/gzdoom/src/gzdoom-g"
  5171. version ".zip"))
  5172. (sha256
  5173. (base32
  5174. "09a4kx3ry8pc9r578m7yprwa7zsdqxjpn10lyc92r5g9sx4l1m1a"))
  5175. (patches (search-patches "gzdoom-search-in-installed-share.patch"))
  5176. (modules '((guix build utils)))
  5177. (snippet
  5178. '(begin
  5179. (delete-file-recursively "bzip2")
  5180. (delete-file-recursively "game-music-emu")
  5181. (delete-file-recursively "jpeg-6b")
  5182. (delete-file-recursively "zlib")
  5183. #t))))
  5184. (arguments
  5185. '(#:tests? #f
  5186. #:configure-flags
  5187. (let ((out (assoc-ref %outputs "out")))
  5188. (list
  5189. (string-append
  5190. "-DCMAKE_CXX_FLAGS:="
  5191. "-DSHARE_DIR=\\\"" out "/share/\\\" "
  5192. "-DGUIX_OUT_PK3=\\\"" out "/share/games/doom\\\"")
  5193. ;; look for libraries at buildtime instead of
  5194. ;; dynamically finding them at runtime
  5195. "-DDYN_OPENAL=OFF"
  5196. "-DDYN_FLUIDSYNTH=OFF"
  5197. "-DDYN_GTK=OFF"
  5198. "-DDYN_MPG123=OFF"
  5199. "-DDYN_SNDFILE=OFF"))
  5200. #:phases
  5201. (modify-phases %standard-phases
  5202. (add-before 'configure 'fix-referenced-paths
  5203. (lambda* (#:key inputs outputs #:allow-other-keys)
  5204. (let ((fluid-3 (assoc-ref inputs "fluid-3"))
  5205. (timidity++ (assoc-ref inputs "timidity++"))
  5206. (out (assoc-ref outputs "out")))
  5207. (substitute*
  5208. "src/CMakeLists.txt"
  5209. (("COMMAND /bin/sh")
  5210. (string-append "COMMAND " (which "sh"))))
  5211. (substitute*
  5212. "src/sound/mididevices/music_fluidsynth_mididevice.cpp"
  5213. (("/usr/share/sounds/sf2/FluidR3_GM.sf2")
  5214. (string-append fluid-3 "/share/soundfonts/FluidR3Mono_GM.sf3")))
  5215. (substitute*
  5216. "src/sound/mididevices/music_timiditypp_mididevice.cpp"
  5217. (("exename = \"timidity\"")
  5218. (string-append "exename = \"" timidity++ "/bin/timidity\"")))
  5219. #t))))))
  5220. (build-system cmake-build-system)
  5221. (inputs `(("bzip2" ,bzip2)
  5222. ("fluid-3" ,fluid-3)
  5223. ("fluidsynth" ,fluidsynth-1) ;XXX: try using 2.x when updating
  5224. ("gtk+3" ,gtk+)
  5225. ("libgme" ,libgme)
  5226. ("libjpeg" ,libjpeg)
  5227. ("libsndfile" ,libsndfile)
  5228. ("mesa" ,mesa)
  5229. ("mpg123" ,mpg123)
  5230. ("openal" ,openal)
  5231. ("sdl2" ,sdl2)
  5232. ("timidity++" ,timidity++)
  5233. ("zlib" ,zlib)))
  5234. (native-inputs `(("pkg-config" ,pkg-config)
  5235. ("unzip" ,unzip)))
  5236. (synopsis "Modern Doom 2 source port")
  5237. (description "GZdoom is a port of the Doom 2 game engine, with a modern
  5238. renderer. It improves modding support with ZDoom's advanced mapping features
  5239. and the new ZScript language. In addition to Doom, it supports Heretic, Hexen,
  5240. Strife, Chex Quest, and fan-created games like Harmony, Hacx and Freedoom.")
  5241. (home-page "https://zdoom.org/index")
  5242. (license (list license:gpl3+ ; gzdoom game
  5243. license:lgpl3+ ; gzdoom renderer
  5244. license:expat ; gdtoa
  5245. (license:non-copyleft ; modified dumb
  5246. "file://dumb/licence.txt"
  5247. "Dumb license, explicitly GPL compatible.")))))
  5248. (define-public fortune-mod
  5249. (package
  5250. (name "fortune-mod")
  5251. (version "2.6.2")
  5252. (source
  5253. (origin
  5254. (method git-fetch)
  5255. (uri (git-reference
  5256. (url "https://github.com/shlomif/fortune-mod")
  5257. (commit (string-append name "-" version))))
  5258. (file-name (git-file-name name version))
  5259. (sha256
  5260. (base32
  5261. "11xff87s8ifw2dqs90n0rjq0psv4i7ykybygmibsqjj7id3xxw4c"))))
  5262. (build-system cmake-build-system)
  5263. (arguments
  5264. `(#:test-target "check"
  5265. #:phases
  5266. (modify-phases %standard-phases
  5267. (add-after 'unpack 'fix-build-env
  5268. (lambda* (#:key inputs #:allow-other-keys)
  5269. (use-modules (guix build utils))
  5270. (let* ((cmake-rules (assoc-ref inputs "cmake-rules")))
  5271. (copy-file cmake-rules
  5272. (string-append "fortune-mod/cmake/"
  5273. (strip-store-file-name cmake-rules)))
  5274. (chdir "fortune-mod")
  5275. ;; TODO: Valgrind tests fail for some reason.
  5276. ;; Similar issue: https://github.com/shlomif/fortune-mod/issues/21 (?)
  5277. (delete-file "tests/t/valgrind.t")
  5278. #t)))
  5279. (add-after 'install 'fix-install-directory
  5280. (lambda* (#:key outputs #:allow-other-keys)
  5281. ;; Move binary from "games/" to "bin/" and remove the latter. This
  5282. ;; is easier than patching CMakeLists.txt since the tests hard-code
  5283. ;; the location as well.
  5284. (let* ((out (assoc-ref outputs "out"))
  5285. (bin (string-append out "/bin"))
  5286. (games (string-append out "/games")))
  5287. (rename-file (string-append games "/fortune")
  5288. (string-append bin "/fortune"))
  5289. (rmdir games)
  5290. #t))))))
  5291. (inputs `(("recode" ,recode)))
  5292. (native-inputs
  5293. `(("perl" ,perl)
  5294. ;; The following is only needed for tests.
  5295. ("perl-file-find-object" ,perl-file-find-object)
  5296. ("perl-test-differences" ,perl-test-differences)
  5297. ("perl-class-xsaccessor" ,perl-class-xsaccessor)
  5298. ("perl-io-all" ,perl-io-all)
  5299. ("perl-test-runvalgrind" ,perl-test-runvalgrind)
  5300. ("cmake-rules"
  5301. ,(origin
  5302. (method url-fetch)
  5303. (uri (string-append "https://bitbucket.org/shlomif/shlomif-cmake-modules/"
  5304. "raw/c505713d7a7cda608f97f01577e5868a711b883e/"
  5305. "shlomif-cmake-modules/Shlomif_Common.cmake"))
  5306. (sha256
  5307. (base32 "0kx9s1qqhhzprp1w3b67xmsns0n0v506bg5hgrshxaxpy6lqiwb2"))))))
  5308. (home-page "http://www.shlomifish.org/open-source/projects/fortune-mod/")
  5309. (synopsis "The Fortune Cookie program from BSD games")
  5310. (description "Fortune is a command-line utility which displays a random
  5311. quotation from a collection of quotes.")
  5312. (license license:bsd-4)))
  5313. (define xonotic-data
  5314. (package
  5315. (name "xonotic-data")
  5316. (version "0.8.2")
  5317. (source
  5318. (origin
  5319. (method url-fetch)
  5320. (uri (string-append "http://dl.xonotic.org/xonotic-"
  5321. version ".zip"))
  5322. (file-name (string-append name "-" version ".zip"))
  5323. (sha256
  5324. (base32
  5325. "1mcs6l4clvn7ibfq3q69k2p0z6ww75rxvnngamdq5ic6yhq74bx2"))))
  5326. (build-system trivial-build-system)
  5327. (native-inputs
  5328. `(("unzip" ,unzip)))
  5329. (arguments
  5330. `(#:modules ((guix build utils))
  5331. #:builder
  5332. (begin
  5333. (use-modules (guix build utils))
  5334. (let* ((out (assoc-ref %outputs "out"))
  5335. (xonotic (string-append out "/share/xonotic"))
  5336. (source (assoc-ref %build-inputs "source"))
  5337. (unzip (string-append (assoc-ref %build-inputs "unzip") "/bin/unzip")))
  5338. (copy-file source (string-append ,name "-" ,version ".zip"))
  5339. (invoke unzip (string-append ,name "-" ,version ".zip"))
  5340. (mkdir-p out)
  5341. (mkdir-p xonotic)
  5342. (chdir "Xonotic")
  5343. (copy-recursively "data"
  5344. (string-append xonotic "/data"))
  5345. (copy-recursively "server"
  5346. (string-append xonotic "/server"))
  5347. (install-file "key_0.d0pk" xonotic)))))
  5348. (home-page "http://xonotic.org")
  5349. (synopsis "Data files for Xonotic")
  5350. (description
  5351. "Xonotic-data provides the data files required by the game Xonotic.")
  5352. (license (list license:gpl2+
  5353. (license:x11-style "file://server/rcon.pl")))))
  5354. (define-public xonotic
  5355. (package
  5356. (name "xonotic")
  5357. (version "0.8.2")
  5358. (source
  5359. (origin
  5360. (method url-fetch)
  5361. (uri (string-append "http://dl.xonotic.org/xonotic-"
  5362. version "-source.zip"))
  5363. (file-name (string-append name "-" version ".zip"))
  5364. (sha256
  5365. (base32
  5366. "0axxw04fyz6jlfqd0kp7hdrqa0li31sx1pbipf2j5qp9wvqicsay"))))
  5367. (build-system gnu-build-system)
  5368. (arguments
  5369. `(#:configure-flags (list (string-append "--prefix="
  5370. (assoc-ref %outputs "out"))
  5371. "--disable-rijndael")
  5372. #:phases
  5373. (modify-phases %standard-phases
  5374. (add-before 'configure 'make-darkplaces
  5375. (lambda* (#:key outputs #:allow-other-keys)
  5376. (let* ((out (assoc-ref outputs "out"))
  5377. (sharedir (string-append out "/share/xonotic/")))
  5378. (invoke "make" "-C" "source/darkplaces"
  5379. (string-append "DP_FS_BASEDIR="
  5380. sharedir)
  5381. "DP_LINK_TO_LIBJPEG=1"
  5382. "DP_SOUND_API=ALSA"
  5383. "CC=gcc"
  5384. "-f" "makefile"
  5385. "cl-release")
  5386. (invoke "make" "-C" "source/darkplaces"
  5387. (string-append "DP_FS_BASEDIR="
  5388. sharedir)
  5389. "DP_LINK_TO_LIBJPEG=1"
  5390. "DP_SOUND_API=ALSA"
  5391. "CC=gcc"
  5392. "-f" "makefile"
  5393. "sdl-release")
  5394. (invoke "make" "-C" "source/darkplaces"
  5395. (string-append "DP_FS_BASEDIR="
  5396. sharedir)
  5397. "DP_LINK_TO_LIBJPEG=1"
  5398. "DP_SOUND_API=ALSA"
  5399. "CC=gcc"
  5400. "-f" "makefile"
  5401. "sv-release"))))
  5402. (add-before 'configure 'bootstrap
  5403. (lambda _
  5404. (chdir "source/d0_blind_id")
  5405. (invoke "sh" "autogen.sh")))
  5406. (add-after 'build 'install-desktop-entry
  5407. (lambda* (#:key outputs #:allow-other-keys)
  5408. ;; Add .desktop files for the 2 variants and the symlink
  5409. (let* ((output (assoc-ref outputs "out"))
  5410. (apps (string-append output "/share/applications")))
  5411. (mkdir-p apps)
  5412. (with-output-to-file
  5413. (string-append apps "/xonotic-glx.desktop")
  5414. (lambda _
  5415. (format #t
  5416. "[Desktop Entry]~@
  5417. Name=xonotic-glx~@
  5418. Comment=Xonotic glx~@
  5419. Exec=~a/bin/xonotic-glx~@
  5420. TryExec=~@*~a/bin/xonotic-glx~@
  5421. Icon=xonotic~@
  5422. Categories=Game~@
  5423. Type=Application~%"
  5424. output)))
  5425. (with-output-to-file
  5426. (string-append apps "/xonotic-sdl.desktop")
  5427. (lambda _
  5428. (format #t
  5429. "[Desktop Entry]~@
  5430. Name=xonotic-sdl~@
  5431. Comment=Xonotic sdl~@
  5432. Exec=~a/bin/xonotic-sdl~@
  5433. TryExec=~@*~a/bin/xonotic-sdl~@
  5434. Icon=xonotic~@
  5435. Categories=Game~@
  5436. Type=Application~%"
  5437. output)))
  5438. (with-output-to-file
  5439. (string-append apps "/xonotic.desktop")
  5440. (lambda _
  5441. (format #t
  5442. "[Desktop Entry]~@
  5443. Name=xonotic~@
  5444. Comment=Xonotic~@
  5445. Exec=~a/bin/xonotic-glx~@
  5446. TryExec=~@*~a/bin/xonotic~@
  5447. Icon=xonotic~@
  5448. Categories=Game~@
  5449. Type=Application~%"
  5450. output)))
  5451. #t)))
  5452. (add-after 'install-desktop-entry 'install-icons
  5453. (lambda* (#:key outputs #:allow-other-keys)
  5454. (let ((out (assoc-ref outputs "out")))
  5455. (with-directory-excursion "../../misc/logos/icons_png/"
  5456. (for-each
  5457. (lambda (file)
  5458. (let* ((size (string-filter char-numeric? file))
  5459. (icons (string-append out "/share/icons/hicolor/"
  5460. size "x" size "/apps")))
  5461. (mkdir-p icons)
  5462. (copy-file file (string-append icons "/xonotic.png"))))
  5463. '("xonotic_16.png" "xonotic_22.png" "xonotic_24.png"
  5464. "xonotic_32.png" "xonotic_48.png" "xonotic_64.png"
  5465. "xonotic_128.png" "xonotic_256.png" "xonotic_512.png"))))))
  5466. (add-after 'install-icons 'install-binaries
  5467. (lambda* (#:key outputs #:allow-other-keys)
  5468. (let ((out (assoc-ref outputs "out")))
  5469. (define (install src dst)
  5470. (let ((dst (string-append out dst)))
  5471. (mkdir-p (dirname dst))
  5472. (copy-file src dst)))
  5473. (mkdir-p (string-append out "/bin"))
  5474. (install "../darkplaces/darkplaces-dedicated"
  5475. "/bin/xonotic-dedicated")
  5476. (install "../darkplaces/darkplaces-glx"
  5477. "/bin/xonotic-glx")
  5478. (install "../darkplaces/darkplaces-sdl"
  5479. "/bin/xonotic-sdl")
  5480. ;; Provide a default xonotic executable, defaulting to SDL.
  5481. (symlink (string-append out "/bin/xonotic-sdl")
  5482. (string-append out "/bin/xonotic"))
  5483. #t)))
  5484. (add-after 'install-binaries 'install-data
  5485. (lambda* (#:key outputs inputs #:allow-other-keys)
  5486. (let* ((out (assoc-ref outputs "out"))
  5487. (data (assoc-ref inputs "xonotic-data")))
  5488. (symlink (string-append data "/share/xonotic")
  5489. (string-append out "/share/xonotic"))
  5490. #t)))
  5491. (add-after 'install-binaries 'wrap-binaries
  5492. (lambda* (#:key outputs inputs #:allow-other-keys)
  5493. ;; Curl and libvorbis need to be wrapped so that we get
  5494. ;; sound and networking.
  5495. (let* ((out (assoc-ref outputs "out"))
  5496. (bin (string-append out "/bin/xonotic"))
  5497. (bin-sdl (string-append out "/bin/xonotic-sdl"))
  5498. (bin-glx (string-append out "/bin/xonotic-glx"))
  5499. (bin-dedicated (string-append out "/bin/xonotic-dedicated"))
  5500. (curl (assoc-ref inputs "curl"))
  5501. (vorbis (assoc-ref inputs "libvorbis")))
  5502. (wrap-program bin
  5503. `("LD_LIBRARY_PATH" ":" prefix
  5504. (,(string-append curl "/lib:" vorbis "/lib"))))
  5505. (wrap-program bin-sdl
  5506. `("LD_LIBRARY_PATH" ":" prefix
  5507. (,(string-append curl "/lib:" vorbis "/lib"))))
  5508. (wrap-program bin-glx
  5509. `("LD_LIBRARY_PATH" ":" prefix
  5510. (,(string-append curl "/lib:" vorbis "/lib"))))
  5511. (wrap-program bin-dedicated
  5512. `("LD_LIBRARY_PATH" ":" prefix
  5513. (,(string-append curl "/lib:" vorbis "/lib"))))
  5514. #t))))))
  5515. (inputs
  5516. `(("xonotic-data" ,xonotic-data)
  5517. ("alsa-lib" ,alsa-lib)
  5518. ("curl" ,curl)
  5519. ("libjpeg" ,libjpeg)
  5520. ("libmodplug" ,libmodplug)
  5521. ("libvorbis" ,libvorbis)
  5522. ("libogg" ,libogg)
  5523. ("libxpm" ,libxpm)
  5524. ("libxxf86dga" ,libxxf86dga)
  5525. ("libxxf86vm" ,libxxf86vm)
  5526. ("libx11" ,libx11)
  5527. ("libxext" ,libxext)
  5528. ("libxau" ,libxau)
  5529. ("libxdmcp" ,libxdmcp)
  5530. ("mesa" ,mesa)
  5531. ("glu" ,glu)
  5532. ("freetype" ,freetype)
  5533. ("sdl2" ,sdl2)
  5534. ("libpng" ,libpng)
  5535. ("hicolor-icon-theme" ,hicolor-icon-theme)))
  5536. (native-inputs
  5537. `(("unzip" ,unzip)
  5538. ("autoconf" ,autoconf)
  5539. ("automake" ,automake)
  5540. ("pkg-config" ,pkg-config)
  5541. ("libtool" ,libtool)
  5542. ("gmp" ,gmp)))
  5543. (home-page "http://xonotic.org")
  5544. (synopsis "Fast-paced first-person shooter game")
  5545. (description
  5546. "Xonotic is a free, fast-paced first-person shooter.
  5547. The project is geared towards providing addictive arena shooter
  5548. gameplay which is all spawned and driven by the community itself.
  5549. Xonotic is a direct successor of the Nexuiz project with years of
  5550. development between them, and it aims to become the best possible
  5551. open-source FPS of its kind.")
  5552. (license (list license:gpl2+
  5553. license:bsd-3 ; /source/d0_blind_id folder and others
  5554. (license:x11-style "" "See file rcon.pl.")))))
  5555. (define-public frotz
  5556. (package
  5557. (name "frotz")
  5558. (version "2.44")
  5559. (source (origin
  5560. (method url-fetch)
  5561. (uri (list (string-append
  5562. "http://www.ifarchive.org/if-archive/infocom/interpreters/"
  5563. name "/" name "-" version ".tar.gz")
  5564. (string-append
  5565. "ftp://ftp.ifarchive.org/if-archive/infocom/interpreters/"
  5566. name "/" name "-" version ".tar.gz")))
  5567. (sha256
  5568. (base32
  5569. "1v735xr3blznac8fnwa27s1vhllx4jpz7kw7qdw1bsfj6kq21v3k"))))
  5570. (build-system gnu-build-system)
  5571. (arguments
  5572. `(#:tests? #f ; there are no tests
  5573. #:phases
  5574. (modify-phases %standard-phases
  5575. (delete 'configure)
  5576. (add-before 'build 'curses
  5577. (lambda _
  5578. (substitute* "Makefile"
  5579. (("lcurses") "lncurses"))
  5580. #t))
  5581. (replace 'install
  5582. (lambda* (#:key outputs #:allow-other-keys)
  5583. (let* ((out (assoc-ref outputs "out"))
  5584. (bin (string-append out "/bin"))
  5585. (man (string-append out "/share/man/man6")))
  5586. (install-file "frotz" bin)
  5587. (mkdir-p man)
  5588. (install-file "doc/frotz.6" man)
  5589. #t))))))
  5590. (inputs `(("libmodplug" ,libmodplug)
  5591. ("libsamplerate" ,libsamplerate)
  5592. ("libsndfile" ,libsndfile)
  5593. ("libvorbis" ,libvorbis)
  5594. ("ncurses" ,ncurses)))
  5595. (synopsis "Portable Z-machine interpreter (ncurses version) for text adventure games")
  5596. (description "Frotz is an interpreter for Infocom games and other Z-machine
  5597. games in the text adventure/interactive fiction genre. This version of Frotz
  5598. complies with standard 1.0 of Graham Nelson's specification. It plays all
  5599. Z-code games V1-V8, including V6, with sound support through libao, and uses
  5600. ncurses for text display.")
  5601. (home-page "http://frotz.sourceforge.net")
  5602. (license license:gpl2+)))
  5603. (define-public frotz-dumb-terminal
  5604. (package
  5605. (name "frotz-dumb-terminal")
  5606. (version "2.44")
  5607. (source (origin
  5608. (method url-fetch)
  5609. (uri (list (string-append
  5610. "http://www.ifarchive.org/if-archive/infocom/interpreters/"
  5611. "frotz" "/" "frotz" "-" version ".tar.gz")
  5612. (string-append
  5613. "ftp://ftp.ifarchive.org/if-archive/infocom/interpreters/"
  5614. "frotz" "/" "frotz" "-" version ".tar.gz")))
  5615. (sha256
  5616. (base32
  5617. "1v735xr3blznac8fnwa27s1vhllx4jpz7kw7qdw1bsfj6kq21v3k"))))
  5618. (build-system gnu-build-system)
  5619. (arguments
  5620. `(#:tests? #f ; there are no tests
  5621. #:phases
  5622. (modify-phases %standard-phases
  5623. (delete 'configure)
  5624. (replace 'build
  5625. (lambda _
  5626. (invoke "make" "dumb")))
  5627. (replace 'install
  5628. (lambda* (#:key outputs #:allow-other-keys)
  5629. (let* ((out (assoc-ref outputs "out"))
  5630. (bin (string-append out "/bin"))
  5631. (man (string-append out "/share/man/man6")))
  5632. (install-file "dfrotz" bin)
  5633. (mkdir-p man)
  5634. (install-file "doc/dfrotz.6" man)
  5635. #t))))))
  5636. (synopsis "Portable Z-machine dumb interpreter for text adventure games")
  5637. (description "Frotz is an interpreter for Infocom games and
  5638. other Z-machine games in the text adventure/interactive fiction genre.
  5639. dfrotz is the dumb interface version. You get no screen control; everything
  5640. is just printed to the terminal line by line. The terminal handles all the
  5641. scrolling. Maybe you'd like to experience what it's like to play Adventure on
  5642. a teletype. A much cooler use for compiling Frotz with the dumb interface is
  5643. that it can be wrapped in CGI scripting, PHP, and the like to allow people
  5644. to play games on webpages. It can also be made into a chat bot.")
  5645. (home-page "http://frotz.sourceforge.net")
  5646. (license license:gpl2+)))
  5647. (define-public frotz-sdl
  5648. (let* ((commit "4de8c34f2116fff554af6216c30ec9d41bf50b24"))
  5649. (package
  5650. (name "frotz-sdl")
  5651. (version "2.45pre")
  5652. (source (origin
  5653. (method git-fetch)
  5654. (uri (git-reference
  5655. (url "https://gitlab.com/DavidGriffith/frotz")
  5656. (commit commit)))
  5657. (sha256
  5658. (base32
  5659. "18ms21pcrl7ipcnyqnf8janamkryzx78frsgd9kfk67jvbj0z2k8"))
  5660. (file-name (git-file-name name version))))
  5661. (build-system gnu-build-system)
  5662. (arguments
  5663. `(#:tests? #f ; there are no tests
  5664. #:phases
  5665. (modify-phases %standard-phases
  5666. (delete 'configure)
  5667. (add-before 'build 'patch-makefile
  5668. (lambda _
  5669. (substitute* "Makefile"
  5670. (("lcurses") "lncurses")
  5671. (("^BUILD_DATE_TIME =.*$")
  5672. "BUILD_DATE_TIME = \"2.45pre-20180907.00000\"\n"))
  5673. #t))
  5674. (replace 'build
  5675. (lambda _
  5676. (invoke "make" "sdl")))
  5677. (replace 'install
  5678. (lambda* (#:key outputs #:allow-other-keys)
  5679. (let* ((out (assoc-ref outputs "out"))
  5680. (bin (string-append out "/bin"))
  5681. (man (string-append out "/share/man/man6")))
  5682. (install-file "sfrotz" bin)
  5683. (mkdir-p man)
  5684. (install-file "doc/sfrotz.6" man)
  5685. #t))))))
  5686. (native-inputs
  5687. `(("pkg-config" ,pkg-config)
  5688. ("which" ,which)
  5689. ("perl" ,perl)))
  5690. (inputs `(("sdl2" ,sdl2)
  5691. ("sdl2-mixer" ,sdl2-mixer)
  5692. ("libmodplug" ,libmodplug)
  5693. ("libsamplerate" ,libsamplerate)
  5694. ("libsndfile" ,libsndfile)
  5695. ("libvorbis" ,libvorbis)
  5696. ("ncurses" ,ncurses)
  5697. ("freetype" ,freetype)
  5698. ("libjpeg-turbo" ,libjpeg-turbo)))
  5699. (synopsis "Portable Z-machine interpreter (SDL port) for text adventure games")
  5700. (description "Frotz is an interpreter for Infocom games and other Z-machine
  5701. games in the text adventure/interactive fiction genre. This version of Frotz
  5702. using SDL fully supports all these versions of the Z-Machine including the
  5703. graphical version 6. Graphics and sound are created through the use of the SDL
  5704. libraries. AIFF sound effects and music in MOD and OGG formats are supported
  5705. when packaged in Blorb container files or optionally from individual files.")
  5706. (home-page "http://frotz.sourceforge.net")
  5707. (license license:gpl2+))))
  5708. (define-public libmanette
  5709. (package
  5710. (name "libmanette")
  5711. (version "0.2.1")
  5712. (source (origin
  5713. (method url-fetch)
  5714. (uri (string-append "mirror://gnome/sources/" name "/"
  5715. (version-major+minor version) "/"
  5716. name "-" version ".tar.xz"))
  5717. (sha256
  5718. (base32
  5719. "14vqz30p4693yy3yxs0gj858x25sl2kawib1g9lj8g5frgl0hd82"))))
  5720. (build-system meson-build-system)
  5721. (native-inputs
  5722. `(("glib" ,glib "bin") ; for glib-compile-resources
  5723. ("gobject-introspection" ,gobject-introspection)
  5724. ("pkg-config" ,pkg-config)
  5725. ("vala" ,vala)))
  5726. (inputs
  5727. `(("libevdev" ,libevdev)
  5728. ("libgudev" ,libgudev)))
  5729. (home-page "https://wiki.gnome.org/Apps/Games")
  5730. (synopsis "Game controller library")
  5731. (description "Libmanette is a small GObject library giving you simple
  5732. access to game controllers. It supports the de-facto standard gamepads as
  5733. defined by the W3C standard Gamepad specification or as implemented by the SDL
  5734. GameController.")
  5735. (license license:lgpl2.1+)))
  5736. (define-public quadrapassel
  5737. (package
  5738. (name "quadrapassel")
  5739. (version "3.31.3")
  5740. (source (origin
  5741. (method url-fetch)
  5742. (uri (string-append "mirror://gnome/sources/" name "/"
  5743. (version-major+minor version) "/"
  5744. name "-" version ".tar.xz"))
  5745. (sha256
  5746. (base32
  5747. "08i01nsgfb502xzzrrcxxbs7awb0j1h4c08vmj0j18ipa1sz8vb8"))))
  5748. (build-system glib-or-gtk-build-system)
  5749. (native-inputs
  5750. `(("desktop-file-utils" ,desktop-file-utils) ;for desktop-file-validate
  5751. ("gettext" ,gnu-gettext)
  5752. ("glib" ,glib "bin") ;for glib-compile-resources
  5753. ("itstool" ,itstool)
  5754. ("libxml2" ,libxml2) ;for xmllint
  5755. ("pkg-config" ,pkg-config)
  5756. ("vala" ,vala)))
  5757. (inputs
  5758. `(("clutter" ,clutter)
  5759. ("clutter-gtk" ,clutter-gtk)
  5760. ("gtk+" ,gtk+)
  5761. ("libcanberra" ,libcanberra)
  5762. ("libmanette" ,libmanette)
  5763. ("librsvg" ,librsvg)))
  5764. (home-page "https://wiki.gnome.org/Apps/Quadrapassel")
  5765. (synopsis "GNOME version of Tetris")
  5766. (description "Quadrapassel comes from the classic falling-block game,
  5767. Tetris. The goal of the game is to create complete horizontal lines of
  5768. blocks, which will disappear. The blocks come in seven different shapes made
  5769. from four blocks each: one straight, two L-shaped, one square, and two
  5770. S-shaped. The blocks fall from the top center of the screen in a random
  5771. order. You rotate the blocks and move them across the screen to drop them in
  5772. complete lines. You score by dropping blocks fast and completing lines. As
  5773. your score gets higher, you level up and the blocks fall faster.")
  5774. (license license:gpl2+)))
  5775. (define-public endless-sky
  5776. (package
  5777. (name "endless-sky")
  5778. (version "0.9.8")
  5779. (source
  5780. (origin
  5781. (method git-fetch)
  5782. (uri (git-reference
  5783. (url "https://github.com/endless-sky/endless-sky")
  5784. (commit (string-append "v" version))))
  5785. (file-name (git-file-name name version))
  5786. (sha256
  5787. (base32
  5788. "0i36lawypikbq8vvzfis1dn7yf6q0d2s1cllshfn7kmjb6pqfi6c"))))
  5789. (build-system scons-build-system)
  5790. (arguments
  5791. `(#:scons ,scons-python2
  5792. #:scons-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
  5793. #:tests? #f ; no tests
  5794. #:phases
  5795. (modify-phases %standard-phases
  5796. (add-after 'unpack 'patch-resource-locations
  5797. (lambda* (#:key outputs #:allow-other-keys)
  5798. (substitute* "source/Files.cpp"
  5799. (("/usr/local/")
  5800. (string-append (assoc-ref outputs "out") "/")))
  5801. #t))
  5802. (add-after 'unpack 'patch-scons
  5803. (lambda _
  5804. (substitute* "SConstruct"
  5805. ;; Keep environmental variables
  5806. (("Environment\\(\\)")
  5807. "Environment(ENV = os.environ)")
  5808. ;; Install into %out/bin
  5809. (("games\"") "bin\""))
  5810. #t)))))
  5811. (inputs
  5812. `(("glew" ,glew)
  5813. ("libjpeg" ,libjpeg-turbo)
  5814. ("libmad" ,libmad)
  5815. ("libpng" ,libpng)
  5816. ("openal" ,openal)
  5817. ("sdl2" ,sdl2)))
  5818. (home-page "https://endless-sky.github.io/")
  5819. (synopsis "2D space trading and combat game")
  5820. (description "Endless Sky is a 2D space trading and combat game. Explore
  5821. other star systems. Earn money by trading, carrying passengers, or completing
  5822. missions. Use your earnings to buy a better ship or to upgrade the weapons and
  5823. engines on your current one. Blow up pirates. Take sides in a civil war. Or
  5824. leave human space behind and hope to find friendly aliens whose culture is more
  5825. civilized than your own.")
  5826. (license (list license:gpl3+
  5827. license:cc-by-sa3.0
  5828. license:cc-by-sa4.0
  5829. license:public-domain))))
  5830. (define-public stepmania
  5831. (package
  5832. (name "stepmania")
  5833. (version "5.1.0-b2")
  5834. (source
  5835. (origin
  5836. (method git-fetch)
  5837. (uri (git-reference
  5838. (url "https://github.com/stepmania/stepmania.git")
  5839. (commit (string-append "v" version))))
  5840. (file-name (git-file-name name version))
  5841. (sha256
  5842. (base32
  5843. "0a7y9l7xm510vgnpmj1is7p9m6d6yd0fcaxrjcickz295k5w3rdn"))
  5844. (modules '((guix build utils)))
  5845. (snippet
  5846. '(begin
  5847. ;; Remove song files, which are licensed under a non-commercial
  5848. ;; clause, and a course pointing to them.
  5849. (for-each delete-file-recursively
  5850. '("Songs/StepMania 5/Goin' Under"
  5851. "Songs/StepMania 5/MechaTribe Assault"
  5852. "Songs/StepMania 5/Springtime"))
  5853. (for-each delete-file '("Courses/Default/Jupiter.crs"
  5854. "Courses/Default/Jupiter.png"))
  5855. ;; Unbundle libpng.
  5856. (substitute* "extern/CMakeLists.txt"
  5857. (("include\\(CMakeProject-png.cmake\\)") ""))
  5858. (delete-file-recursively "extern/libpng")
  5859. #t))))
  5860. (build-system cmake-build-system)
  5861. (arguments
  5862. `(#:tests? #f ;FIXME: couldn't find how to run tests
  5863. #:build-type "Release"
  5864. #:out-of-source? #f ;for the 'install-desktop' phase
  5865. #:configure-flags
  5866. (list "-DWITH_SYSTEM_FFMPEG=1"
  5867. ;; SSE instructions are available on Intel systems only.
  5868. ,@(if (any (cute string-prefix? <> (or (%current-target-system)
  5869. (%current-system)))
  5870. '("x64_64" "i686"))
  5871. '()
  5872. '("-DWITH_SSE2=NO"))
  5873. ;; Configuration cannot find GTK2 without the two following
  5874. ;; flags.
  5875. (string-append "-DGTK2_GDKCONFIG_INCLUDE_DIR="
  5876. (assoc-ref %build-inputs "gtk+")
  5877. "/lib/gtk-2.0/include")
  5878. (string-append "-DGTK2_GLIBCONFIG_INCLUDE_DIR="
  5879. (assoc-ref %build-inputs "glib")
  5880. "/lib/glib-2.0/include"))
  5881. #:phases
  5882. (modify-phases %standard-phases
  5883. (add-after 'unpack 'fix-install-subdir
  5884. ;; Installation would be done in "%out/stepmania-X.Y", but we
  5885. ;; prefer the more common layout "%out/share/stepmania".
  5886. (lambda _
  5887. (substitute* "src/CMakeLists.txt"
  5888. (("\"stepmania-.*?\"") "\"share/stepmania\""))
  5889. #t))
  5890. (add-after 'unpack 'unbundle-libpng
  5891. (lambda* (#:key inputs #:allow-other-keys)
  5892. (substitute* "src/CMakeLists.txt"
  5893. (("\\$\\{SM_EXTERN_DIR\\}/libpng/include")
  5894. (string-append (assoc-ref inputs "libpng") "/include")))
  5895. #t))
  5896. (add-after 'install 'install-executable
  5897. (lambda* (#:key outputs #:allow-other-keys)
  5898. (let* ((out (assoc-ref outputs "out"))
  5899. (bin (string-append out "/bin"))
  5900. (exe (string-append out "/share/stepmania/stepmania")))
  5901. (mkdir-p bin)
  5902. (symlink exe (string-append bin "/stepmania"))
  5903. #t)))
  5904. (add-after 'install-executable 'install-desktop
  5905. (lambda* (#:key outputs #:allow-other-keys)
  5906. (let* ((out (assoc-ref outputs "out"))
  5907. (share (string-append out "/share"))
  5908. (applications (string-append share "/applications"))
  5909. (icons (string-append share "/icons")))
  5910. (install-file "stepmania.desktop" applications)
  5911. (mkdir-p icons)
  5912. (copy-recursively "icons" icons)
  5913. #t)))
  5914. ;; Move documentation in a more usual place, i.e.,
  5915. ;; "%out/share/doc/stepmania/".
  5916. (add-after 'install-desktop 'install-doc
  5917. (lambda* (#:key outputs #:allow-other-keys)
  5918. (let* ((out (assoc-ref outputs "out"))
  5919. (share (string-append out "/share")))
  5920. (with-directory-excursion share
  5921. (mkdir-p "doc")
  5922. (symlink "../stepmania/Docs" "doc/stepmania"))
  5923. #t))))))
  5924. (native-inputs
  5925. `(("pkg-config" ,pkg-config)
  5926. ("yasm" ,yasm)))
  5927. (inputs
  5928. `(("alsa-lib" ,alsa-lib)
  5929. ;; Per upstream, StepMania is only guaranteed to work with a very
  5930. ;; specific FFmpeg version, which is included in the repository as
  5931. ;; a Git submodule. This particular version requirement usually
  5932. ;; changes every few years.
  5933. ("ffmpeg" ,ffmpeg-for-stepmania)
  5934. ("glib" ,glib)
  5935. ("glew" ,glew)
  5936. ("gtk+" ,gtk+-2)
  5937. ("jsoncpp" ,jsoncpp)
  5938. ("libpng" ,libpng)
  5939. ("libjpeg" ,libjpeg-8)
  5940. ("libmad" ,libmad)
  5941. ("libogg" ,libogg)
  5942. ("libva" ,libva)
  5943. ("libvorbis" ,libvorbis)
  5944. ("libxinerama" ,libxinerama)
  5945. ("libxrandr" ,libxrandr)
  5946. ("mesa" ,mesa)
  5947. ("pcre" ,pcre)
  5948. ("pulseaudio" ,pulseaudio)
  5949. ("sdl" ,sdl2)
  5950. ("udev" ,eudev)
  5951. ("zlib" ,zlib)))
  5952. (synopsis "Advanced rhythm game designed for both home and arcade use")
  5953. (description "StepMania is a dance and rhythm game. It features 3D
  5954. graphics, keyboard and dance pad support, and an editor for creating your own
  5955. steps.
  5956. This package provides the core application, but no song is shipped. You need
  5957. to download and install them in @file{$HOME/.stepmania-X.Y/Songs} directory.")
  5958. (home-page "https://www.stepmania.com")
  5959. (license license:expat)))