From c282884276aa6c6c5fa41a4d75b0cc5d93f56932 Mon Sep 17 00:00:00 2001 From: Fedor Strizhnev Date: Sun, 22 Nov 2015 23:13:18 +0300 Subject: Symbian: help file build once now --- backends/platform/symbian/help/build_help.mk | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/backends/platform/symbian/help/build_help.mk b/backends/platform/symbian/help/build_help.mk index 7a18ad8252..b2910f9c11 100644 --- a/backends/platform/symbian/help/build_help.mk +++ b/backends/platform/symbian/help/build_help.mk @@ -18,12 +18,9 @@ clean : del ScummVM.hlp del ScummVM.hlp.hrh -bld : - cshlpcmp ScummVM.xml - ifeq (WINS,$(findstring WINS, $(PLATFORM))) copy ScummVM.hlp $(EPOCROOT)epoc32\$(PLATFORM)\c\resource\help endif -freeze lib cleanlib final resource savespace releasables : +bld freeze lib cleanlib final resource savespace releasables : -- cgit v1.2.3 From a155ba65422c9c8aca001658719880c4bcec90f5 Mon Sep 17 00:00:00 2001 From: Fedor Strizhnev Date: Sun, 22 Nov 2015 23:16:32 +0300 Subject: Symbian: add new engine to help file --- backends/platform/symbian/help/ScummVM.rtf | 104 +++++++++++++++-------------- 1 file changed, 54 insertions(+), 50 deletions(-) diff --git a/backends/platform/symbian/help/ScummVM.rtf b/backends/platform/symbian/help/ScummVM.rtf index 15b2105ecd..220eb76ecd 100644 --- a/backends/platform/symbian/help/ScummVM.rtf +++ b/backends/platform/symbian/help/ScummVM.rtf @@ -39,26 +39,28 @@ Synonyms;}{\*\cs33 \additive \super \sbasedon10 endnote reference;}{\s34\ql \fi- \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \sbasedon0 \snext34 \sautoupd List Bullet;}{\s35\ql \fi-284\li568\ri0\sa120\widctlpar{\*\pn \pnlvlblt\ilvl10\ls2047\pnrnot0\pnf3\pnstart1\pnindent283\pnhang{\pntxtb \'b7}} \nooverflow\faroman\ls2047\ilvl10\rin0\lin568\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \sbasedon0 \snext35 \sautoupd List Bullet 2;}{\s36\ql \li0\ri0\sa120\widctlpar\tqc\tx4153\tqr\tx8306\nooverflow\faroman\rin0\lin0\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \sbasedon0 \snext36 footer;}{\s37\ql \li284\ri0\sa120\widctlpar\nooverflow\faroman\rin0\lin284\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \sbasedon0 \snext37 List Continue;}{ -\s38\ql \li566\ri0\sa120\widctlpar\nooverflow\faroman\rin0\lin566\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \sbasedon0 \snext38 List Continue 2;}}{\*\listtable{\list\listtemplateid-737142542\listsimple{\listlevel\levelnfc0 -\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1 \fi-360\li643\jclisttab\tx643 }{\listname ;}\listid-129} -{\list\listtemplateid1907811784\listsimple{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1\fbias0 -\fi-360\li643\jclisttab\tx643 }{\listname ;}\listid-125}{\list\listtemplateid1912741052\listsimple{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\chbrdr -\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid-120}{\list\listtemplateid-51363132\listsimple{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 -{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid-119}{\list\listtemplateid947971744\listsimple{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0 -\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\'01*;}{\levelnumbers;}\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1 }{\listname ;}\listid-2}}{\*\listoverridetable{\listoverride\listid-120\listoverridecount0\ls1} -{\listoverride\listid-129\listoverridecount0\ls2}{\listoverride\listid-119\listoverridecount0\ls3}{\listoverride\listid-125\listoverridecount0\ls4}{\listoverride\listid-120\listoverridecount0\ls5}{\listoverride\listid-129\listoverridecount0\ls6} -{\listoverride\listid-119\listoverridecount0\ls7}{\listoverride\listid-125\listoverridecount0\ls8}{\listoverride\listid-120\listoverridecount0\ls9}{\listoverride\listid-129\listoverridecount0\ls10}{\listoverride\listid-119\listoverridecount0\ls11} -{\listoverride\listid-125\listoverridecount0\ls12}{\listoverride\listid-120\listoverridecount0\ls13}{\listoverride\listid-129\listoverridecount0\ls14}{\listoverride\listid-119\listoverridecount0\ls15}{\listoverride\listid-125\listoverridecount0\ls16} -{\listoverride\listid-120\listoverridecount0\ls17}{\listoverride\listid-129\listoverridecount0\ls18}{\listoverride\listid-119\listoverridecount0\ls19}{\listoverride\listid-125\listoverridecount0\ls20}{\listoverride\listid-120\listoverridecount0\ls21} -{\listoverride\listid-129\listoverridecount0\ls22}{\listoverride\listid-119\listoverridecount0\ls23}{\listoverride\listid-125\listoverridecount0\ls24}{\listoverride\listid-120\listoverridecount0\ls25}{\listoverride\listid-129\listoverridecount0\ls26} -{\listoverride\listid-119\listoverridecount0\ls27}{\listoverride\listid-125\listoverridecount0\ls28}{\listoverride\listid-120\listoverridecount0\ls29}{\listoverride\listid-129\listoverridecount0\ls30}{\listoverride\listid-119\listoverridecount0\ls31} -{\listoverride\listid-125\listoverridecount0\ls32}{\listoverride\listid-120\listoverridecount0\ls33}{\listoverride\listid-129\listoverridecount0\ls34}{\listoverride\listid-119\listoverridecount0\ls35}{\listoverride\listid-125\listoverridecount0\ls36} -{\listoverride\listid-120\listoverridecount0\ls37}{\listoverride\listid-129\listoverridecount0\ls38}{\listoverride\listid-119\listoverridecount0\ls39}{\listoverride\listid-125\listoverridecount0\ls40}{\listoverride\listid-2\listoverridecount1{\lfolevel -\listoverrideformat{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'01\u-3991 ?;}{\levelnumbers;}\f30\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1\fbias0 \fi-283\li283 -}}\ls41}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'01\u-3991 ?;}{\levelnumbers;}\f30\chbrdr -\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1\fbias0 \fi-283\li283 }}\ls42}}{\info{\author Fedor}{\operator Fedor}{\creatim\yr2013\mo11\dy30\hr23\min4}{\revtim\yr2014\mo12\dy29\hr22\min52}{\version102}{\edmins95}{\nofpages8}{\nofwords1514}{\nofchars8634} -{\*\company DEV}{\nofcharsws0}{\vern8249}}\margl1701\margr850\margt1134\margb1134 \deftab708\widowctrl\ftnbj\aenddoc\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\hyphcaps0\horzdoc\dghspace120\dgvspace120\dghorigin1701\dgvorigin1984\dghshow0 -\dgvshow3\jcompress\viewkind4\viewscale100\nolnhtadjtbl \fet0{\*\template E:\\Documents and Settings\\Administrator\\Application Data\\Microsoft\\\'d8\'e0\'e1\'eb\'ee\'ed\'fb\\cshelp2000.dot}\sectd \linex0\sectdefaultcl {\*\pnseclvl1 +\s38\ql \li566\ri0\sa120\widctlpar\nooverflow\faroman\rin0\lin566\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \sbasedon0 \snext38 List Continue 2;}{\*\cs39 \additive \sbasedon10 x x-first x-last;}}{\*\listtable +{\list\listtemplateid-737142542\listsimple{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1 \fi-360\li643 +\jclisttab\tx643 }{\listname ;}\listid-129}{\list\listtemplateid1907811784\listsimple{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\chbrdr +\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1\fbias0 \fi-360\li643\jclisttab\tx643 }{\listname ;}\listid-125}{\list\listtemplateid1912741052\listsimple{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\'02\'00.;}{\levelnumbers\'01;}\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid-120}{\list\listtemplateid-51363132\listsimple{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid-119}{\list\listtemplateid947971744\listsimple +{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\'01*;}{\levelnumbers;}\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1 }{\listname ;}\listid-2}}{\*\listoverridetable +{\listoverride\listid-120\listoverridecount0\ls1}{\listoverride\listid-129\listoverridecount0\ls2}{\listoverride\listid-119\listoverridecount0\ls3}{\listoverride\listid-125\listoverridecount0\ls4}{\listoverride\listid-120\listoverridecount0\ls5} +{\listoverride\listid-129\listoverridecount0\ls6}{\listoverride\listid-119\listoverridecount0\ls7}{\listoverride\listid-125\listoverridecount0\ls8}{\listoverride\listid-120\listoverridecount0\ls9}{\listoverride\listid-129\listoverridecount0\ls10} +{\listoverride\listid-119\listoverridecount0\ls11}{\listoverride\listid-125\listoverridecount0\ls12}{\listoverride\listid-120\listoverridecount0\ls13}{\listoverride\listid-129\listoverridecount0\ls14}{\listoverride\listid-119\listoverridecount0\ls15} +{\listoverride\listid-125\listoverridecount0\ls16}{\listoverride\listid-120\listoverridecount0\ls17}{\listoverride\listid-129\listoverridecount0\ls18}{\listoverride\listid-119\listoverridecount0\ls19}{\listoverride\listid-125\listoverridecount0\ls20} +{\listoverride\listid-120\listoverridecount0\ls21}{\listoverride\listid-129\listoverridecount0\ls22}{\listoverride\listid-119\listoverridecount0\ls23}{\listoverride\listid-125\listoverridecount0\ls24}{\listoverride\listid-120\listoverridecount0\ls25} +{\listoverride\listid-129\listoverridecount0\ls26}{\listoverride\listid-119\listoverridecount0\ls27}{\listoverride\listid-125\listoverridecount0\ls28}{\listoverride\listid-120\listoverridecount0\ls29}{\listoverride\listid-129\listoverridecount0\ls30} +{\listoverride\listid-119\listoverridecount0\ls31}{\listoverride\listid-125\listoverridecount0\ls32}{\listoverride\listid-120\listoverridecount0\ls33}{\listoverride\listid-129\listoverridecount0\ls34}{\listoverride\listid-119\listoverridecount0\ls35} +{\listoverride\listid-125\listoverridecount0\ls36}{\listoverride\listid-120\listoverridecount0\ls37}{\listoverride\listid-129\listoverridecount0\ls38}{\listoverride\listid-119\listoverridecount0\ls39}{\listoverride\listid-125\listoverridecount0\ls40} +{\listoverride\listid-120\listoverridecount0\ls41}{\listoverride\listid-129\listoverridecount0\ls42}{\listoverride\listid-119\listoverridecount0\ls43}{\listoverride\listid-125\listoverridecount0\ls44}{\listoverride\listid-120\listoverridecount0\ls45} +{\listoverride\listid-129\listoverridecount0\ls46}{\listoverride\listid-119\listoverridecount0\ls47}{\listoverride\listid-125\listoverridecount0\ls48}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\levelnfcn23 +\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'01\u-3991 ?;}{\levelnumbers;}\f30\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1\fbias0 \fi-283\li283 }}\ls49}{\listoverride\listid-2 +\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'01\u-3991 ?;}{\levelnumbers;}\f30\chbrdr\brdrnone\brdrcf1 +\chshdng0\chcfpat1\chcbpat1\fbias0 \fi-283\li283 }}\ls50}}{\info{\author Fedor}{\operator Fedor}{\creatim\yr2013\mo11\dy30\hr23\min4}{\revtim\yr2015\mo11\dy22\hr17\min27}{\version105}{\edmins185}{\nofpages8}{\nofwords1514}{\nofchars8634}{\*\company DEV} +{\nofcharsws0}{\vern8249}}\margl1701\margr850\margt1134\margb1134 \deftab708\widowctrl\ftnbj\aenddoc\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\hyphcaps0\horzdoc\dghspace120\dgvspace120\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3 +\jcompress\viewkind4\viewscale100\nolnhtadjtbl \fet0{\*\template E:\\Documents and Settings\\Administrator\\Application Data\\Microsoft\\\'d8\'e0\'e1\'eb\'ee\'ed\'fb\\cshelp2000.dot}\sectd \linex0\sectdefaultcl {\*\pnseclvl1 \pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5 \pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s17\ql \li0\ri0\sa120\widctlpar\nooverflow\faroman\rin0\lin0\itap0 \i\f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 { @@ -70,20 +72,19 @@ Synonyms;}{\*\cs33 \additive \super \sbasedon10 endnote reference;}{\s34\ql \fi- \par }\pard\plain \ql \li0\ri0\sa120\widctlpar\nooverflow\faroman\rin0\lin0\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\f28 \par }\pard\plain \s2\ql \li0\ri0\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\nooverflow\faroman\outlinelevel1\rin0\lin0\itap0 \b\f1\fs24\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\b0\f28 About ScummVM Help -\par {\pntext\pard\plain\s26 \f30\fs20\lang2057\langfe1033\langnp2057\langfenp1033 \loch\af30\dbch\af0\hich\f30 \'69\tab}}\pard\plain \s26\ql \fi-283\li283\ri0\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlblt\ilvl0\ls41\pnrnot0 -\pnf30\pnstart1\pnindent283\pnhang{\pntxtb i}}\nooverflow\faroman\ls41\rin0\lin283\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {About ScummVM Help +\par {\pntext\pard\plain\s26 \f30\fs20\lang2057\langfe1033\langnp2057\langfenp1033 \loch\af30\dbch\af0\hich\f30 \'69\tab}}\pard\plain \s26\ql \fi-283\li283\ri0\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlblt\ilvl0\ls49\pnrnot0 +\pnf30\pnstart1\pnindent283\pnhang{\pntxtb i}}\nooverflow\faroman\ls49\rin0\lin283\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {About ScummVM Help \par }\pard\plain \ql \li0\ri0\sa120\widctlpar{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\nooverflow\faroman\rin0\lin0\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\f28 -\par }{ -This help file based on ScummVM forum thread with some elaborations(in Anotherguest section) and text correction. If you wish add some text or translate you may download and modify source document from https://sourceforge.net/projects/scummvms60git/ and t -hen send me to fedor_qd@mail.ru +\par }{This help file based on ScummVM forum thread with some elaborations(in Anotherguest section) and text correction. If you wish add some text or translate you may download and modify source document from https://sourceforge.net/projects/scummvms60git/ a +nd then send me to fedor_qd@mail.ru \par Feel free to replace, merge or write you own instead 1st, 2nd and 3rd guides. Other sections require strict translations. And don\rquote t forget add your name :-) \par First guide contain help by Anotherguest, second - VincentJ, third - murgo. This doc created by Fedor Strizhniou. \par Enjoys, cheers! Always yours =)}{\lang1059\langfe1033\langnp1059 \par }{\f29 \par }\pard\plain \s2\ql \li0\ri0\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\nooverflow\faroman\outlinelevel1\rin0\lin0\itap0 \b\f1\fs24\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\b0\f28 1st guide -\par {\pntext\pard\plain\s26 \f30\fs20\lang2057\langfe1033\langnp2057\langfenp1033 \loch\af30\dbch\af0\hich\f30 \'69\tab}}\pard\plain \s26\ql \fi-283\li283\ri0\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlblt\ilvl0\ls41\pnrnot0 -\pnf30\pnstart1\pnindent283\pnhang{\pntxtb i}}\nooverflow\faroman\ls41\rin0\lin283\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {Controls, Virtual keyboard, Shortcuts, ScummVM, Tips, S60, UIQ, UIQ3, S80, s80, S90, s90 +\par {\pntext\pard\plain\s26 \f30\fs20\lang2057\langfe1033\langnp2057\langfenp1033 \loch\af30\dbch\af0\hich\f30 \'69\tab}}\pard\plain \s26\ql \fi-283\li283\ri0\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlblt\ilvl0\ls49\pnrnot0 +\pnf30\pnstart1\pnindent283\pnhang{\pntxtb i}}\nooverflow\faroman\ls49\rin0\lin283\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {Controls, Virtual keyboard, Shortcuts, ScummVM, Tips, S60, UIQ, UIQ3, S80, s80, S90, s90 \par }\pard\plain \ql \li0\ri0\sa120\widctlpar{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\nooverflow\faroman\rin0\lin0\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\f28 \par }{UIQ3 devices: To the top right (holding the phone portrait) you four icons, from the top they are \par @@ -124,22 +125,22 @@ hen send me to fedor_qd@mail.ru \par \par What are these Joystick, Keyboard and Cursor modes anyway? \par }{\f28 -\par }{Joystick mode sends SDL joystick events to ScummVM which acts as a mouse control in ScummVM. Cursor mode sends keyboard arrows instead, so for example it can be used to navigate -through directorylist (one hand use perhaps!?) or save games etc. Keyboard mode is only available for S60 and enables multi-tap to enter text characters in save dialogs. These modes are implemented at the underlying SDL level, so this determines the types - of events that ScummVM receives from SDL. +\par }{Joystick mode sends SDL joystick events to ScummVM which acts as a mouse control in ScummVM. Cursor mode sends keyboard arrows instead, so for exampl +e it can be used to navigate through directorylist (one hand use perhaps!?) or save games etc. Keyboard mode is only available for S60 and enables multi-tap to enter text characters in save dialogs. These modes are implemented at the underlying SDL level, + so this determines the types of events that ScummVM receives from SDL. \par What are these Shrinked, Zoomed and Upscaled modes anyway? \par -\par Shrink displays the game on your screen but in a shrinked way, either in Port -rait or Landscape mode, so not all the pixels can be seen. Zoom mode uses the maximum resolution of your phone displaying a smaller part of the game zoomed at 1:1 pixels. For scrolling in S60 Zoom mode: 0+Cursor keys to scroll around, 0+Ok button to cente -r view. Upscale tries to fill the larger screens on S80/S90 devices in a better way for low resolution games. Currently it uses a pixel interpolation upscaling routine. +\par Shrink displays the game on your screen but in a shrinked way, either in Portrait or Landscape mode, so not all the pixels ca +n be seen. Zoom mode uses the maximum resolution of your phone displaying a smaller part of the game zoomed at 1:1 pixels. For scrolling in S60 Zoom mode: 0+Cursor keys to scroll around, 0+Ok button to center view. Upscale tries to fill the larger screens + on S80/S90 devices in a better way for low resolution games. Currently it uses a pixel interpolation upscaling routine. \par \par You can also use a bluetooth mouse with S60v3 devices to control your game. You need the bluetooth hid library from Hinkka http://koti.mbnet.fi/hinkka/Download.html to get it to work properly. \par }{\f29 \par \par }\pard\plain \s2\ql \li0\ri0\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\nooverflow\faroman\outlinelevel1\rin0\lin0\itap0 \b\f1\fs24\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\b0\f28 2nd guide -\par {\pntext\pard\plain\s26 \f30\fs20\lang2057\langfe1033\langnp2057\langfenp1033 \loch\af30\dbch\af0\hich\f30 \'69\tab}}\pard\plain \s26\ql \fi-283\li283\ri0\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlblt\ilvl0\ls41\pnrnot0 -\pnf30\pnstart1\pnindent283\pnhang{\pntxtb i}}\nooverflow\faroman\ls41\rin0\lin283\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {Controls, Virtual keyboard, Shortcuts, ScummVM, Tips, S60, s60 +\par {\pntext\pard\plain\s26 \f30\fs20\lang2057\langfe1033\langnp2057\langfenp1033 \loch\af30\dbch\af0\hich\f30 \'69\tab}}\pard\plain \s26\ql \fi-283\li283\ri0\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlblt\ilvl0\ls49\pnrnot0 +\pnf30\pnstart1\pnindent283\pnhang{\pntxtb i}}\nooverflow\faroman\ls49\rin0\lin283\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {Controls, Virtual keyboard, Shortcuts, ScummVM, Tips, S60, s60 \par }\pard\plain \ql \li0\ri0\sa120\widctlpar{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\nooverflow\faroman\rin0\lin0\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\f28 \par \par }{More user-friendly guide for Nokia phones (based on N96 but should apply to most phones) @@ -164,8 +165,8 @@ r view. Upscale tries to fill the larger screens on S80/S90 devices in a better \par }{1 - Change Input. \par This is the option you'll probably use the most. There are three settings; A,C and J. \par -\par A - This is the "Text Input" mode. It allows you to type directly into ScummVM as if you were using a keyboard. Type the same way you would when sending a text message o -ff of your phone. Please note that the pointer is disabled when in this mode. Don't forget to exit Configuration Mode before typing! +\par A - This is the "Text Input" mode. It allows you to type directly into ScummVM as if you were using a keyboard. Type the same way you would wh +en sending a text message off of your phone. Please note that the pointer is disabled when in this mode. Don't forget to exit Configuration Mode before typing! \par \par C - This is the "Cursor" mode. This emulates the arrow keys of the keyboard. Some games require using this instead of the mouse (e.g. the destruction derby section towards the end of Full Throttle). \par @@ -180,9 +181,9 @@ ff of your phone. Please note that the pointer is disabled when in this mode. Do \par Only applies to Landscape mode, simply swaps the screen output between having the phone tilted on its left side or on its right side. \par \par 4 - Toggle Zoom On and Off -\par Zooms in on a portion of the screen. Handy for when you are looking through a screen fo -r items or having trouble reading subtitles. Use the navigation buttons for panning around the play area. Don't forget you'll have to exit out of Configuration Mode before you can move the pointer again. Exiting Configuration Mode does not reset the zoom -level. +\par Zooms in on a portion of the screen. Handy for when you are +looking through a screen for items or having trouble reading subtitles. Use the navigation buttons for panning around the play area. Don't forget you'll have to exit out of Configuration Mode before you can move the pointer again. Exiting Configuration Mo +de does not reset the zoom level. \par }{\f29 \par }{5 & 6 - Unused \par @@ -203,12 +204,13 @@ level. \par \par }\pard\plain \s2\ql \li0\ri0\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\nooverflow\faroman\outlinelevel1\rin0\lin0\itap0 \b\f1\fs24\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\b0\f28 3rd guide -\par {\pntext\pard\plain\s26 \f30\fs20\lang2057\langfe1033\langnp2057\langfenp1033 \loch\af30\dbch\af0\hich\f30 \'69\tab}}\pard\plain \s26\ql \fi-283\li283\ri0\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlblt\ilvl0\ls41\pnrnot0 -\pnf30\pnstart1\pnindent283\pnhang{\pntxtb i}}\nooverflow\faroman\ls41\rin0\lin283\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {Controls, Virtual keyboard, Shortcuts, ScummVM, Tips, S60, s60 +\par {\pntext\pard\plain\s26 \f30\fs20\lang2057\langfe1033\langnp2057\langfenp1033 \loch\af30\dbch\af0\hich\f30 \'69\tab}}\pard\plain \s26\ql \fi-283\li283\ri0\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlblt\ilvl0\ls49\pnrnot0 +\pnf30\pnstart1\pnindent283\pnhang{\pntxtb i}}\nooverflow\faroman\ls49\rin0\lin283\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {Controls, Virtual keyboard, Shortcuts, ScummVM, Tips, S60, s60 \par }\pard\plain \ql \li0\ri0\sa120\widctlpar{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\nooverflow\faroman\rin0\lin0\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\f28 \par -\par }{ScummVM keys on Nokia e71 (most likely on any other qwerty-device, too), tested on version 0.14.0svn (Feb. 18 20 -09 05:56:07). Number keys are inserted by first pressing fn-key (leftmost key at bottom row on E71) and then pressing correct key (e.g. 5 is fn+g). You don't have to press both keys simultaneously. +\par }{ScummVM keys on Nokia + e71 (most likely on any other qwerty-device, too), tested on version 0.14.0svn (Feb. 18 2009 05:56:07). Number keys are inserted by first pressing fn-key (leftmost key at bottom row on E71) and then pressing correct key (e.g. 5 is fn+g). You don't have t +o press both keys simultaneously. \par \par Basic keys: \par @@ -258,8 +260,8 @@ level. \par p -- punch (hand) \par \par AGI games (King's Quest, Police Quest etc.): -\par The games work beautifully on the E71, but there's some stupid bugs (in input). I recall finding some debug keys and "last sentence" / "inventory" -keys in earlier version, but I can't find them any more. Also you can't turn on sirens in Police Quest, whi -ch kinda makes it unplayable. +\par The games work beautifully on the E71, but there's some stupid bugs (in input). I recall finding some debug keys and "last sentence" / "inventory" -keys in earlier version, bu +t I can't find them any more. Also you can't turn on sirens in Police Quest, which kinda makes it unplayable. \par \par There's good side and bad side to each input mode: \par Keyboard (I use this primarily) @@ -280,8 +282,8 @@ ch kinda makes it unplayable. \par }{\f28 \par }\pard\plain \s2\ql \li0\ri0\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\nooverflow\faroman\outlinelevel1\rin0\lin0\itap0 \b\f1\fs24\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {ScummVM1 engines list -\par {\pntext\pard\plain\s26 \f30\fs20\lang2057\langfe1033\langnp2057\langfenp1033 \loch\af30\dbch\af0\hich\f30 \'69\tab}}\pard\plain \s26\ql \fi-283\li283\ri0\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlblt\ilvl0\ls42\pnrnot0 -\pnf30\pnstart1\pnindent283\pnhang{\pntxtb i}}\nooverflow\faroman\ls42\rin0\lin283\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {Supported engines +\par {\pntext\pard\plain\s26 \f30\fs20\lang2057\langfe1033\langnp2057\langfenp1033 \loch\af30\dbch\af0\hich\f30 \'69\tab}}\pard\plain \s26\ql \fi-283\li283\ri0\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlblt\ilvl0\ls50\pnrnot0 +\pnf30\pnstart1\pnindent283\pnhang{\pntxtb i}}\nooverflow\faroman\ls50\rin0\lin283\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {Supported engines \par }\pard\plain \ql \li0\ri0\sa120\widctlpar{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\nooverflow\faroman\rin0\lin0\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {access \par agi \par agos @@ -315,9 +317,10 @@ ch kinda makes it unplayable. \par \par }\pard\plain \s2\ql \li0\ri0\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\nooverflow\faroman\outlinelevel1\rin0\lin0\itap0 \b\f1\fs24\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {ScummVM2 engines list -\par {\pntext\pard\plain\s26 \f30\fs20\lang2057\langfe1033\langnp2057\langfenp1033 \loch\af30\dbch\af0\hich\f30 \'69\tab}}\pard\plain \s26\ql \fi-283\li283\ri0\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlblt\ilvl0\ls42\pnrnot0 -\pnf30\pnstart1\pnindent283\pnhang{\pntxtb i}}\nooverflow\faroman\ls42\rin0\lin283\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {Supported engines +\par {\pntext\pard\plain\s26 \f30\fs20\lang2057\langfe1033\langnp2057\langfenp1033 \loch\af30\dbch\af0\hich\f30 \'69\tab}}\pard\plain \s26\ql \fi-283\li283\ri0\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlblt\ilvl0\ls50\pnrnot0 +\pnf30\pnstart1\pnindent283\pnhang{\pntxtb i}}\nooverflow\faroman\ls50\rin0\lin283\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {Supported engines \par }\pard\plain \ql \li0\ri0\sa120\widctlpar\nooverflow\faroman\rin0\lin0\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {avalanche +\par }{\cs39 bbvs}{ \par cge \par composer \par draci @@ -336,6 +339,7 @@ ch kinda makes it unplayable. \par prince \par sci \par \tab SCI32 +\par sherlock \par sky \par sword1 \par sword2 -- cgit v1.2.3 From 96b2706b296aaf9fe3b880c723381ea3f33b5e66 Mon Sep 17 00:00:00 2001 From: Fedor Strizhnev Date: Sun, 22 Nov 2015 23:20:45 +0300 Subject: Symbian: fix complation issues --- backends/platform/symbian/mmp/scummvm_base.mmp.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/backends/platform/symbian/mmp/scummvm_base.mmp.in b/backends/platform/symbian/mmp/scummvm_base.mmp.in index 559d070452..d547070578 100644 --- a/backends/platform/symbian/mmp/scummvm_base.mmp.in +++ b/backends/platform/symbian/mmp/scummvm_base.mmp.in @@ -38,6 +38,7 @@ TARGETTYPE lib OPTION GCCE -I'/Symbian/S60_5th_Edition_SDK_v1.0/epoc32/include/png' // Note: the LIB:*.lib statements are used by AdaptAllMMPs.pl, so don't remove them! +MACRO USE_SYSTEM_REMOVE //START_AUTO_MACROS_MASTER// // empty base file, will be updated by Perl build scripts @@ -99,6 +100,7 @@ SOURCEPATH ..\..\..\..\audio //STOP_AUTO_OBJECTS_AUDIO_// SOURCE softsynth\fmtowns_pc98\towns_pc98_fmsynth.cpp // Included since its excluded by filter +SOURCE miles_mt32.cpp #if defined (WINS) SOURCE rate.cpp // WINS emulator version: add regular .cpp -- cgit v1.2.3 From 296199086aba8874680c3ca7b5738547c8426cd4 Mon Sep 17 00:00:00 2001 From: Fedor Strizhnev Date: Sun, 22 Nov 2015 23:22:30 +0300 Subject: Symbian: add new engine --- .../platform/symbian/mmp/scummvm_sherlock.mmp.in | 53 ++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 backends/platform/symbian/mmp/scummvm_sherlock.mmp.in diff --git a/backends/platform/symbian/mmp/scummvm_sherlock.mmp.in b/backends/platform/symbian/mmp/scummvm_sherlock.mmp.in new file mode 100644 index 0000000000..1edd781100 --- /dev/null +++ b/backends/platform/symbian/mmp/scummvm_sherlock.mmp.in @@ -0,0 +1,53 @@ +/* ScummVM - Graphic Adventure Engine + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2015 The ScummVM Team + * Copyright (C) 2015 Strizniou Fedor + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +// +// EPOC MMP makefile project for ScummVM +// + +// *** Definitions + +TARGET scummvm_sherlock.lib +TARGETTYPE lib +#include "config.mmh" + +//START_AUTO_MACROS_SLAVE// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_MACROS_SLAVE// + +// *** SOURCE files + +SOURCEPATH ..\..\..\..\engines\sherlock + +//START_AUTO_OBJECTS_SHERLOCK_// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_OBJECTS_SHERLOCK_// + -- cgit v1.2.3 From f6ea588b89e4b11699941d9b1cd3e06ef3def436 Mon Sep 17 00:00:00 2001 From: Fedor Strizhnev Date: Sun, 22 Nov 2015 23:34:04 +0300 Subject: Symbian: fix build issues Add new linker options to remove useless code Add file not parsed by script --- backends/platform/symbian/S60v3/ScummVM_A0000658_S60v3.mmp.in | 3 ++- backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/backends/platform/symbian/S60v3/ScummVM_A0000658_S60v3.mmp.in b/backends/platform/symbian/S60v3/ScummVM_A0000658_S60v3.mmp.in index c9e4769484..308b9ee2af 100644 --- a/backends/platform/symbian/S60v3/ScummVM_A0000658_S60v3.mmp.in +++ b/backends/platform/symbian/S60v3/ScummVM_A0000658_S60v3.mmp.in @@ -36,7 +36,7 @@ TARGETPATH sys\bin TARGETTYPE exe OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char // fixes error "section .data loaded at [...] overlaps section .text loaded at [...]" -LINKEROPTION GCCE -Tdata 0xAA00000 +LINKEROPTION GCCE -Tdata 0xAA00000 --gc-sections --strip-all UID 0x100039ce 0xA0000658 @@ -122,6 +122,7 @@ SOURCEPATH ..\..\..\.. // backend EPOC/SDL/ESDL specific includes SOURCE backends\platform\sdl\sdl.cpp +SOURCE backends\platform\sdl\sdl-window.cpp SOURCE backends\audiocd\sdl\sdl-audiocd.cpp SOURCE backends\audiocd\default\default-audiocd.cpp SOURCE backends\fs\symbian\symbian-fs.cpp diff --git a/backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in b/backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in index f2d7b51a7a..4e6e62362c 100644 --- a/backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in +++ b/backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in @@ -37,7 +37,7 @@ TARGETTYPE exe OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char // fixes error "section .data loaded at [...] overlaps section .text loaded at [...]" -LINKEROPTION GCCE -Tdata 0xAA00000 +LINKEROPTION GCCE -Tdata 0xAA00000 --gc-sections --strip-all UID 0x100039ce 0xA0000657 @@ -123,6 +123,7 @@ SOURCEPATH ..\..\..\.. // backend EPOC/SDL/ESDL specific includes SOURCE backends\platform\sdl\sdl.cpp +SOURCE backends\platform\sdl\sdl-window.cpp SOURCE backends\audiocd\sdl\sdl-audiocd.cpp SOURCE backends\audiocd\default\default-audiocd.cpp SOURCE backends\fs\symbian\symbian-fs.cpp -- cgit v1.2.3 From 3fdce73c61b2e8807f5fe548f88a8709fc677de2 Mon Sep 17 00:00:00 2001 From: rootfather Date: Wed, 25 Nov 2015 22:52:02 +0100 Subject: NEWS: Update German NEWS file to address all changes made until 9dbaf8d --- doc/de/Neues | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/doc/de/Neues b/doc/de/Neues index 3d155be825..0c681bf1c9 100644 --- a/doc/de/Neues +++ b/doc/de/Neues @@ -8,6 +8,13 @@ Sie auf Englisch unter: - Unterstützung für Sfinx hinzugefügt. - Unterstützung für Zork Nemesis: The Forbidden Lands hinzugefügt. - Unterstützung für Zork: Grand Inquisitor hinzugefügt. + - Unterstützung für The Lost Files of Sherlock Holmes: The Case of the Serrated Scalpel hinzugefügt. + - Unterstützung für The Lost Files of Sherlock Holmes: The Case of the Rose Tattoo hinzugefügt. + - Unterstützung für Beavis and Butthead in Virtual Stupidity hinzugefügt. + - Unterstützung für Amazon: Guardians of Eden hinzugefügt. + + Neue Portierungen: + - Portierung auf den Raspberry Pi erfolgt. Allgemein: - Code für Munt-MT-32-Emulation auf Version 1.5.0 aktualisiert. -- cgit v1.2.3 From 93697c170465df759fb6d26998863ecf2f50301f Mon Sep 17 00:00:00 2001 From: Torbjörn Andersson Date: Fri, 27 Nov 2015 00:48:11 +0100 Subject: MADS: Silence Clang warning There are others still left, but this one was obvious how to fix. --- engines/mads/phantom/phantom_scenes1.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engines/mads/phantom/phantom_scenes1.cpp b/engines/mads/phantom/phantom_scenes1.cpp index 61d32d3f25..7bc9c179b9 100644 --- a/engines/mads/phantom/phantom_scenes1.cpp +++ b/engines/mads/phantom/phantom_scenes1.cpp @@ -59,7 +59,7 @@ void Scene1xx::sceneEntrySound() { break; case 103: - if ((_globals[kJacquesStatus] == 2)) { + if (_globals[kJacquesStatus] == 2) { _vm->_sound->command(32); _globals[kJacquesStatus] = 3; } else -- cgit v1.2.3 From 279be647daa1f96a5efc443ef1aa4441d03a6b3a Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 27 Nov 2015 01:44:32 +0100 Subject: ACCESS: Fix bug in River --- engines/access/amazon/amazon_resources.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/engines/access/amazon/amazon_resources.cpp b/engines/access/amazon/amazon_resources.cpp index 430aa64f30..3d18a16502 100644 --- a/engines/access/amazon/amazon_resources.cpp +++ b/engines/access/amazon/amazon_resources.cpp @@ -2349,8 +2349,8 @@ RiverStruct RIVER2OBJECTS[54] = { RiverStruct *RIVER_OBJECTS[3][2] = { { RIVER0OBJECTS, RIVER0OBJECTS + 46 - 1}, - { RIVER1OBJECTS, RIVER0OBJECTS + 50 - 1 }, - { RIVER2OBJECTS, RIVER0OBJECTS + 54 - 1 } + { RIVER1OBJECTS, RIVER1OBJECTS + 50 - 1 }, + { RIVER2OBJECTS, RIVER2OBJECTS + 54 - 1 } }; const int HELP1COORDS[2][4] = { -- cgit v1.2.3 From fe916f17941ecb383d9f19c7fc046af3816cd73f Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 27 Nov 2015 02:05:40 +0100 Subject: ACCESS: Martian - Simplify check in takePicture() --- engines/access/room.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/engines/access/room.cpp b/engines/access/room.cpp index c91b37c65d..d0f1e59569 100644 --- a/engines/access/room.cpp +++ b/engines/access/room.cpp @@ -111,8 +111,7 @@ void Room::takePicture() { return; } - // TODO: simplify the second part of the test when tested - if ((_vm->_scrollCol < 35) || ((_vm->_scrollRow >= 10) && (_vm->_scrollRow >= 20))){ + if ((_vm->_scrollCol < 35) || (_vm->_scrollRow >= 20)){ Common::String msg = "THAT ISN'T INTERESTING ENOUGH TO WASTE FILM ON."; _vm->_scripts->doCmdPrint_v1(msg); return; -- cgit v1.2.3 From 9d6ae42f655bd1c3797f949763c73ecf8cbf6b53 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 27 Nov 2015 15:05:41 +0100 Subject: MORTEVIELLE: Reduce the scope of a variable --- engines/mortevielle/utils.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/engines/mortevielle/utils.cpp b/engines/mortevielle/utils.cpp index cbc22e4886..651bd5bf57 100644 --- a/engines/mortevielle/utils.cpp +++ b/engines/mortevielle/utils.cpp @@ -1728,12 +1728,12 @@ void MortevielleEngine::showMoveMenuAlert() { void MortevielleEngine::showConfigScreen() { // FIXME: need a DOS palette, index 9 (light blue). Also we should show DOS font here Common::String tmpStr; - int width, cy = 0; + int cy = 0; clearScreen(); do { ++cy; tmpStr = getString(cy + kStartingScreenStringIndex); - width = _screenSurface->getStringWidth(tmpStr); + int width = _screenSurface->getStringWidth(tmpStr); _text->displayStr(tmpStr, 320 - width / 2, cy * 8, 80, 1, 2); } while (cy != 20); -- cgit v1.2.3 From 751183a2698398f8b25f85d189d91151be90549c Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 27 Nov 2015 15:06:10 +0100 Subject: CGE2: Silent a CppCheck warning --- engines/cge2/sound.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/engines/cge2/sound.h b/engines/cge2/sound.h index 6673b67b7a..02afe610a2 100644 --- a/engines/cge2/sound.h +++ b/engines/cge2/sound.h @@ -68,7 +68,7 @@ class Sound { public: SmpInfo _smpinf; - Sound(CGE2Engine *vm); + explicit Sound(CGE2Engine *vm); ~Sound(); void open(); void close(); @@ -116,7 +116,7 @@ private: // Stop MIDI File void sndMidiStop(); public: - MusicPlayer(CGE2Engine *vm); + explicit MusicPlayer(CGE2Engine *vm); ~MusicPlayer(); void loadMidi(int ref); -- cgit v1.2.3 From 24dbee0f065b7165b6c18d73b9b6c564b181640b Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Fri, 27 Nov 2015 16:37:49 +0100 Subject: FULLPIPE: Check result on realloc() --- engines/fullpipe/statics.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/engines/fullpipe/statics.cpp b/engines/fullpipe/statics.cpp index de3e1ea728..8ee3b14d0c 100644 --- a/engines/fullpipe/statics.cpp +++ b/engines/fullpipe/statics.cpp @@ -106,9 +106,14 @@ bool StepArray::gotoNextPoint() { } void StepArray::insertPoints(Common::Point **points, int pointsCount) { - if (_currPointIndex + pointsCount >= _pointsCount) + if (_currPointIndex + pointsCount >= _pointsCount) { _points = (Common::Point **)realloc(_points, sizeof(Common::Point *) * (_currPointIndex + pointsCount)); + if (!_points) { + error("Out of memory at StepArray::insertPoints()"); + } + } + _maxPointIndex = _currPointIndex + pointsCount; for (int i = 0; i < pointsCount; i++) { -- cgit v1.2.3 From a6150f9308f24f55793b8be07f8756d39763b59b Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Fri, 27 Nov 2015 12:12:32 -0500 Subject: ACCESS: Creation of access.dat for holding Access games engine data --- devtools/create_access/amazon_resources.cpp | 757 ++++++++++ devtools/create_access/amazon_resources.h | 62 + devtools/create_access/create_access_dat.cpp | 430 ++++++ devtools/create_access/create_access_dat.h | 186 +++ devtools/create_access/martian_resources.cpp | 182 +++ devtools/create_access/martian_resources.h | 52 + devtools/create_access/module.mk | 13 + dists/engine-data/access.dat | Bin 0 -> 322768 bytes engines/access/access.cpp | 13 + engines/access/access.h | 2 + engines/access/amazon/amazon_game.cpp | 36 +- engines/access/amazon/amazon_logic.cpp | 2 +- engines/access/amazon/amazon_resources.cpp | 2021 +------------------------- engines/access/amazon/amazon_resources.h | 62 +- engines/access/amazon/amazon_room.cpp | 5 +- engines/access/amazon/amazon_scripts.cpp | 4 +- engines/access/char.cpp | 25 +- engines/access/debugger.cpp | 30 +- engines/access/debugger.h | 2 - engines/access/events.cpp | 2 +- engines/access/files.cpp | 18 +- engines/access/files.h | 1 - engines/access/inventory.cpp | 33 +- engines/access/martian/martian_game.cpp | 22 +- engines/access/martian/martian_resources.cpp | 715 +-------- engines/access/martian/martian_resources.h | 29 +- engines/access/martian/martian_room.cpp | 2 +- engines/access/resources.cpp | 134 ++ engines/access/resources.h | 64 + engines/access/room.cpp | 13 +- engines/access/scripts.cpp | 11 +- engines/access/sound.cpp | 2 +- 32 files changed, 2059 insertions(+), 2871 deletions(-) create mode 100644 devtools/create_access/amazon_resources.cpp create mode 100644 devtools/create_access/amazon_resources.h create mode 100644 devtools/create_access/create_access_dat.cpp create mode 100644 devtools/create_access/create_access_dat.h create mode 100644 devtools/create_access/martian_resources.cpp create mode 100644 devtools/create_access/martian_resources.h create mode 100644 devtools/create_access/module.mk create mode 100644 dists/engine-data/access.dat diff --git a/devtools/create_access/amazon_resources.cpp b/devtools/create_access/amazon_resources.cpp new file mode 100644 index 0000000000..50b8f334fb --- /dev/null +++ b/devtools/create_access/amazon_resources.cpp @@ -0,0 +1,757 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "amazon_resources.h" + +namespace Amazon { + +const byte MOUSE0[] = { + // hotspot x and y, uint16 LE + 0, 0, 0, 0, + // byte 1: number of skipped pixels + // byte 2: number of plotted pixels + // then, pixels + 0, 2, 6, 1, + 0, 3, 6, 6, 1, + 0, 3, 6, 6, 1, + 0, 4, 6, 6, 6, 1, + 0, 4, 6, 6, 6, 1, + 0, 5, 6, 6, 6, 6, 1, + 0, 5, 6, 6, 6, 6, 1, + 0, 6, 6, 6, 6, 6, 6, 1, + 0, 6, 6, 6, 6, 6, 6, 1, + 0, 7, 6, 6, 6, 6, 6, 6, 1, + 0, 6, 6, 6, 6, 6, 6, 1, + 0, 5, 6, 6, 6, 6, 1, + 2, 3, 6, 6, 1, + 3, 3, 6, 6, 1, + 3, 3, 6, 6, 1, + 4, 2, 6, 1 +}; + +const byte MOUSE1[] = { + // hotspot x and y, uint16 LE + 0x07, 0x00, 0x07, 0x00, + // byte 1: number of skipped pixels + // byte 2: number of plotted pixels + // then, pixels + 0x06, 0x01, 0x05, + 0x04, 0x05, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, + 0x03, 0x07, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x02, 0x09, 0xFF, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0xFF, + 0x01, 0x0B, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x01, 0x0B, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0x0D, 0x05, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x00, 0x05, + 0x01, 0x0B, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x01, 0x0B, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x02, 0x09, 0xFF, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0xFF, + 0x03, 0x07, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x04, 0x05, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, + 0x06, 0x01, 0x05, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00 +}; + +const byte MOUSE2[] = { + // hotspot x and y, uint16 LE + 0x08, 0x00, 0x08, 0x00, + // byte 1: number of skipped pixels + // byte 2: number of plotted pixels + // then, pixels + 0x00, 0x00, + 0x00, 0x00, + 0x07, 0x02, 0x04, 0x05, + 0x07, 0x02, 0x04, 0x05, + 0x07, 0x02, 0x04, 0x05, + 0x07, 0x02, 0x04, 0x05, + 0x07, 0x02, 0x04, 0x05, + 0x02, 0x0C, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x05, + 0x07, 0x02, 0x04, 0x05, + 0x07, 0x02, 0x04, 0x05, + 0x07, 0x02, 0x04, 0x05, + 0x07, 0x02, 0x04, 0x05, + 0x07, 0x02, 0x04, 0x05, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00 +}; + +const byte MOUSE3[] = { + // hotspot x and y, uint16 LE + 0x00, 0x00, 0x00, 0x00, + // byte 1: number of skipped pixels + // byte 2: number of plotted pixels + // then, pixels + 0x00, 0x0B, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x00, 0x0C, 0x06, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x06, 0x06, 0x05, + 0x00, 0x0C, 0x06, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x06, 0x05, 0x05, + 0x00, 0x0C, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, + 0x00, 0x0C, 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, + 0x00, 0x0C, 0x06, 0x06, 0x06, 0x06, 0x05, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x05, + 0x00, 0x0C, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, + 0x00, 0x0C, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, + 0x00, 0x0C, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, + 0x00, 0x0C, 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, + 0x00, 0x0C, 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, + 0x00, 0x0C, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, + 0x01, 0x0B, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00 +}; +const byte CURSEYE[] = { + // hotspot x and y, uint16 LE + 0x01, 0x00, 0x08, 0x00, + // byte 1: number of skipped pixels + // byte 2: number of plotted pixels + // then, pixels + 0x04, 0x06, 0x0E, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, + 0x03, 0x09, 0x0E, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0D, 0x0D, + 0x02, 0x0B, 0x0E, 0x01, 0x33, 0x33, 0x01, 0x01, 0x33, 0x34, 0x01, 0x01, 0x0D, + 0x01, 0x0D, 0x0E, 0x01, 0x04, 0x34, 0x01, 0x01, 0x01, 0x07, 0x33, 0x04, 0x04, 0x01, 0x0D, + 0x00, 0x0F, 0x0E, 0x0E, 0x01, 0x07, 0x33, 0x33, 0x01, 0x01, 0x33, 0x34, 0x07, 0x07, 0x06, 0x01, 0x0E, + 0x01, 0x0D, 0x0F, 0x0F, 0x06, 0x07, 0x34, 0x33, 0x33, 0x34, 0x07, 0x07, 0x06, 0x0F, 0x0E, + 0x03, 0x09, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0E, + 0x01, 0x01, 0x07, + 0x00, 0x03, 0x07, 0x01, 0x07, + 0x01, 0x01, 0x07, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00 +}; + +const byte CURSHAND[] = { + // hotspot x and y, uint16 LE + 0x02, 0x00, 0x03, 0x00, + // byte 1: number of skipped pixels + // byte 2: number of plotted pixels + // then, pixels + 0x07, 0x02, 0x17, 0x0E, + 0x05, 0x07, 0x0E, 0x12, 0x17, 0x0E, 0x13, 0x17, 0x0E, + 0x02, 0x0C, 0x07, 0x00, 0x17, 0x0E, 0x11, 0x0F, 0x0E, 0x11, 0x17, 0x0E, 0x00, 0x17, + 0x01, 0x0E, 0x07, 0x01, 0x07, 0x0F, 0x0E, 0x11, 0x17, 0x0E, 0x11, 0x0F, 0x0E, 0x12, 0x17, 0x0E, + 0x02, 0x0D, 0x07, 0x00, 0x17, 0x0F, 0x12, 0x0F, 0x0F, 0x11, 0x17, 0x0E, 0x12, 0x0F, 0x0E, + 0x04, 0x0B, 0x0F, 0x0E, 0x11, 0x17, 0x0E, 0x12, 0x0F, 0x0F, 0x11, 0x17, 0x0E, + 0x04, 0x0B, 0x17, 0x0E, 0x12, 0x17, 0x0E, 0x12, 0x17, 0x0E, 0x11, 0x0F, 0x0E, + 0x00, 0x0F, 0x0E, 0x0D, 0x12, 0x00, 0x17, 0x0F, 0x0F, 0x0F, 0x0F, 0x12, 0x0F, 0x0E, 0x12, 0x17, 0x0F, + 0x00, 0x0F, 0x0F, 0x17, 0x0D, 0x11, 0x0F, 0x0E, 0x0D, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0E, 0x0D, + 0x01, 0x0E, 0x0F, 0x17, 0x0F, 0x0E, 0x0F, 0x0D, 0x0D, 0x0D, 0x0D, 0x0E, 0x0F, 0x0F, 0x0E, 0x0D, + 0x02, 0x0D, 0x0F, 0x17, 0x0F, 0x0E, 0x0D, 0x0D, 0x0F, 0x0F, 0x0E, 0x0F, 0x0E, 0x0E, 0x12, + 0x03, 0x0C, 0x0F, 0x17, 0x0F, 0x0F, 0x0F, 0x0E, 0x0F, 0x0F, 0x0F, 0x0E, 0x0D, 0x12, + 0x04, 0x0A, 0x0F, 0x17, 0x0F, 0x0F, 0x0F, 0x0E, 0x0F, 0x0F, 0x0E, 0x0D, + 0x05, 0x09, 0x0F, 0x17, 0x0F, 0x0F, 0x0F, 0x0F, 0x0E, 0x0D, 0x12, + 0x06, 0x08, 0x17, 0x0F, 0x0F, 0x0F, 0x0F, 0x0E, 0x0D, 0x12, + 0x06, 0x07, 0x17, 0x0F, 0x0F, 0x0F, 0x3D, 0x0E, 0x0D +}; + +const byte CURSGET[] = { + // hotspot x and y, uint16 LE + 0x07, 0x00, 0x0E, 0x00, + // byte 1: number of skipped pixels + // byte 2: number of plotted pixels + // then, pixels + 0x0A, 0x05, 0x1C, 0x07, 0x0F, 0x0F, 0x0F, + 0x08, 0x08, 0x1C, 0x07, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0C, + 0x06, 0x0A, 0x1C, 0x07, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0C, + 0x05, 0x0A, 0x07, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0C, + 0x03, 0x0C, 0x07, 0x1C, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0C, + 0x02, 0x0D, 0x1C, 0x0F, 0x0E, 0x0E, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0C, + 0x01, 0x0E, 0x07, 0x0F, 0x0E, 0x0D, 0x0F, 0x0E, 0x0D, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0C, + 0x00, 0x0F, 0x1C, 0x0F, 0x0E, 0x0D, 0x0F, 0x0E, 0x0D, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0C, + 0x00, 0x0F, 0x1C, 0x0E, 0x0D, 0x0F, 0x0E, 0x0D, 0x0F, 0x0F, 0x0C, 0x0C, 0x0E, 0x0F, 0x0F, 0x0F, 0x0C, + 0x00, 0x0E, 0x1C, 0x0D, 0x0F, 0x0E, 0x0D, 0x0F, 0x0F, 0x0C, 0x00, 0x00, 0x0E, 0x0F, 0x0F, 0x0C, + 0x00, 0x0E, 0x1C, 0x0E, 0x0F, 0x0D, 0x0F, 0x0F, 0x0C, 0x00, 0x00, 0x0E, 0x1C, 0x0F, 0x0F, 0x0C, + 0x00, 0x0D, 0x1C, 0x0D, 0x0F, 0x0D, 0x0F, 0x0C, 0x00, 0x00, 0x00, 0x0E, 0x1C, 0x0F, 0x0C, + 0x01, 0x0B, 0x0E, 0x0F, 0x0E, 0x0F, 0x0C, 0x00, 0x00, 0x0E, 0x07, 0x0F, 0x0C, + 0x02, 0x09, 0x0E, 0x0D, 0x0F, 0x0C, 0x00, 0x07, 0x0E, 0x0F, 0x0C, + 0x03, 0x06, 0x0E, 0x0F, 0x0E, 0x07, 0x01, 0x07, + 0x07, 0x01, 0x07 +}; + +const byte CURSCLIMB[] = { + // hotspot x and y, uint16 LE + 0x03, 0x00, 0x0E, 0x00, + // byte 1: number of skipped pixels + // byte 2: number of plotted pixels + // then, pixels + 0x06, 0x04, 0x01, 0x01, 0x01, 0x01, + 0x06, 0x04, 0x0F, 0x0E, 0x01, 0x01, + 0x06, 0x04, 0x0F, 0x0E, 0x0D, 0x01, + 0x07, 0x02, 0x0F, 0x0D, + 0x00, 0x0C, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x13, 0x12, 0x12, 0x12, 0x12, 0x11, 0x11, + 0x00, 0x0D, 0x0D, 0x0E, 0x00, 0x00, 0x13, 0x14, 0x13, 0x12, 0x12, 0x12, 0x11, 0x11, 0x0E, + 0x01, 0x0C, 0x0D, 0x0D, 0x0D, 0x0E, 0x11, 0x13, 0x13, 0x12, 0x11, 0x11, 0x0E, 0x0D, + 0x02, 0x0C, 0x0E, 0x0E, 0x00, 0x00, 0x00, 0x13, 0x12, 0x11, 0x00, 0x00, 0x0E, 0x0D, + 0x03, 0x0B, 0x04, 0x04, 0x04, 0x22, 0x21, 0x21, 0x20, 0x00, 0x00, 0x00, 0x0D, + 0x02, 0x0D, 0x22, 0x04, 0x20, 0x22, 0x04, 0x21, 0x04, 0x20, 0x00, 0x00, 0x00, 0x0E, 0x0E, + 0x03, 0x07, 0x22, 0x21, 0x20, 0x20, 0x22, 0x04, 0x20, + 0x04, 0x06, 0x01, 0x01, 0x00, 0x04, 0x22, 0x20, + 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, 0x20, + 0x03, 0x09, 0x07, 0x01, 0x01, 0x00, 0x00, 0x00, 0x22, 0x04, 0x20, + 0x02, 0x0B, 0x07, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x20, + 0x03, 0x0A, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01 +}; + +const byte CURSTALK[] = { + // hotspot x and y, uint16 LE + 0x02, 0x00, 0x0B, 0x00, + // byte 1: number of skipped pixels + // byte 2: number of plotted pixels + // then, pixels + 0x03, 0x08, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x01, 0x0C, 0x06, 0x06, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x06, 0x06, + 0x00, 0x0E, 0x06, 0x06, 0x06, 0x06, 0x07, 0x06, 0x07, 0x07, 0x06, 0x07, 0x07, 0x06, 0x07, 0x06, + 0x00, 0x0F, 0x06, 0x08, 0x08, 0x08, 0x06, 0x08, 0x06, 0x06, 0x08, 0x06, 0x06, 0x08, 0x06, 0x08, 0x06, + 0x00, 0x0F, 0x06, 0x06, 0x08, 0x06, 0x08, 0x06, 0x08, 0x06, 0x08, 0x06, 0x06, 0x08, 0x08, 0x06, 0x06, + 0x00, 0x0F, 0x06, 0x06, 0x08, 0x06, 0x08, 0x08, 0x08, 0x06, 0x08, 0x06, 0x06, 0x08, 0x06, 0x08, 0x06, + 0x01, 0x0E, 0x06, 0x08, 0x06, 0x08, 0x06, 0x08, 0x06, 0x08, 0x08, 0x06, 0x08, 0x06, 0x08, 0x06, + 0x02, 0x0C, 0x06, 0x06, 0x06, 0x07, 0x06, 0x07, 0x06, 0x06, 0x07, 0x06, 0x07, 0x06, + 0x04, 0x09, 0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x07, 0x06, 0x06, + 0x07, 0x04, 0x06, 0x07, 0x07, 0x06, + 0x02, 0x08, 0x07, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x01, 0x06, 0x07, 0x01, 0x07, 0x06, 0x06, 0x06, + 0x02, 0x01, 0x07, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00 +}; +const byte CURSHELP[] = { + // hotspot x and y, uint16 LE + 0x02, 0x00, 0x0B, 0x00, + // byte 1: number of skipped pixels + // byte 2: number of plotted pixels + // then, pixels + 0x04, 0x06, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, + 0x02, 0x0A, 0x24, 0x24, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x20, + 0x01, 0x0C, 0x24, 0x22, 0x22, 0x22, 0x20, 0x20, 0x20, 0x22, 0x22, 0x22, 0x22, 0x20, + 0x00, 0x0E, 0x24, 0x22, 0x22, 0x22, 0x20, 0x00, 0x00, 0x00, 0x24, 0x22, 0x22, 0x22, 0x22, 0x20, + 0x00, 0x0E, 0x24, 0x22, 0x22, 0x22, 0x22, 0x20, 0x00, 0x00, 0x00, 0x24, 0x22, 0x22, 0x22, 0x20, + 0x00, 0x0E, 0x24, 0x22, 0x22, 0x22, 0x22, 0x20, 0x00, 0x00, 0x00, 0x24, 0x22, 0x22, 0x22, 0x20, + 0x01, 0x0D, 0x24, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x24, 0x22, 0x22, 0x22, 0x22, 0x20, + 0x07, 0x06, 0x24, 0x22, 0x22, 0x22, 0x22, 0x20, + 0x05, 0x07, 0x24, 0x22, 0x22, 0x22, 0x22, 0x20, 0x20, + 0x04, 0x05, 0x24, 0x22, 0x22, 0x22, 0x20, + 0x02, 0x07, 0x07, 0x00, 0x24, 0x20, 0x20, 0x20, 0x20, + 0x01, 0x03, 0x07, 0x01, 0x07, + 0x02, 0x07, 0x07, 0x00, 0x00, 0x24, 0x24, 0x24, 0x24, + 0x04, 0x06, 0x24, 0x22, 0x22, 0x22, 0x22, 0x20, + 0x04, 0x06, 0x24, 0x22, 0x22, 0x22, 0x22, 0x20, + 0x05, 0x04, 0x20, 0x20, 0x20, 0x20 +}; + +const byte *const CURSORS[AMAZON_NUM_CURSORS] = { + MOUSE0, MOUSE1, MOUSE2, MOUSE3, CURSEYE, CURSHAND, CURSGET, CURSCLIMB, CURSTALK, CURSHELP +}; +const uint CURSOR_SIZES[AMAZON_NUM_CURSORS] = { + sizeof(MOUSE0), sizeof(MOUSE1), sizeof(MOUSE2), sizeof(MOUSE3), sizeof(CURSEYE), + sizeof(CURSHAND), sizeof(CURSGET), sizeof(CURSCLIMB), sizeof(CURSTALK), sizeof(CURSHELP) +}; + + +const int FONT2_INDEX[] = { + 62, 2, 6, + 0x0000, 0x0019, 0x0021, 0x002e, 0x0041, 0x005a, 0x0073, 0x008c, 0x0093, 0x009b, + 0x00a3, 0x00bc, 0x00d5, 0x00dd, 0x00ea, 0x00f1, 0x00fe, 0x010b, 0x0118, 0x0125, + 0x0132, 0x013f, 0x014c, 0x0159, 0x0166, 0x0173, 0x0180, 0x0187, 0x018e, 0x01a7, + 0x01b4, 0x01cd, 0x01dc, 0x01f5, 0x0208, 0x0215, 0x0222, 0x022f, 0x023c, 0x0249, + 0x025c, 0x0269, 0x0276, 0x0285, 0x0292, 0x029f, 0x02b2, 0x02c5, 0x02d2, 0x02df, + 0x02ee, 0x02fb, 0x0308, 0x0315, 0x0322, 0x032f, 0x0342, 0x034f, 0x0362, 0x036f, + 0x0388, 0x03a1, +}; + +const byte FONT2_DATA[] = { + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0xf0, 0xf0, 0xf0, + 0x00, 0xf0, 0x00, 0x06, 0xf3, 0xc0, 0xc3, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x07, 0x1c, 0x00, + 0x67, 0x9e, 0xc0, 0x07, 0x1c, 0x00, 0x67, 0x9e, 0xc0, 0x07, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0xc0, 0x00, 0x3f, + 0xfc, 0x00, 0xb2, 0xc0, 0x00, 0x3f, 0xfc, 0x00, 0x02, 0xcb, + 0x00, 0x3f, 0xfc, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x18, 0x60, + 0x70, 0x70, 0x60, 0x1c, 0x00, 0x04, 0x60, 0x18, 0x1c, 0x1c, + 0x1c, 0x70, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x30, + 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xc0, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf0, 0xf0, + 0x00, 0x07, 0x00, 0xf0, 0x03, 0xc0, 0x0f, 0x00, 0x3c, 0x00, + 0xf0, 0x00, 0x00, 0x00, 0x07, 0x3f, 0xc0, 0x70, 0x70, 0x70, + 0x70, 0x70, 0x70, 0x3f, 0xc0, 0x00, 0x00, 0x07, 0x1f, 0x00, + 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0xff, 0xf0, 0x00, 0x00, + 0x08, 0x2b, 0xf0, 0xb0, 0x2c, 0x00, 0xa0, 0x0a, 0x00, 0xff, + 0xfc, 0x00, 0x00, 0x07, 0xff, 0xc0, 0x00, 0x70, 0x03, 0xc0, + 0x00, 0x70, 0xff, 0xc0, 0x00, 0x00, 0x07, 0x0b, 0xc0, 0x2d, + 0xc0, 0xb1, 0xc0, 0xaa, 0xa0, 0x01, 0xc0, 0x00, 0x00, 0x07, + 0xff, 0xf0, 0x70, 0x00, 0x7f, 0xc0, 0x00, 0xb0, 0xbf, 0xc0, + 0x00, 0x00, 0x07, 0x2f, 0xc0, 0x70, 0x00, 0x7f, 0xc0, 0x70, + 0x70, 0x3f, 0xc0, 0x00, 0x00, 0x08, 0xff, 0xfc, 0x00, 0xb0, + 0x02, 0xc0, 0x02, 0xc0, 0x0b, 0x00, 0x00, 0x00, 0x08, 0x2f, + 0xf0, 0xb0, 0x1c, 0x2f, 0xf0, 0xb0, 0x1c, 0x2f, 0xf0, 0x00, + 0x00, 0x07, 0x3f, 0xc0, 0x70, 0x70, 0x3f, 0xf0, 0x00, 0x70, + 0x3f, 0xc0, 0x00, 0x00, 0x03, 0xf0, 0xf0, 0x00, 0xf0, 0xf0, + 0x00, 0x03, 0xf0, 0xf0, 0x00, 0xf0, 0x30, 0x00, 0x09, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0xff, 0xc0, 0x00, 0x00, + 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x06, 0xff, 0x00, 0x03, 0xc0, 0x0f, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0a, 0x00, 0x40, 0x00, 0x01, 0xf0, 0x00, 0x07, 0x1c, + 0x00, 0x1f, 0xff, 0x00, 0x70, 0x01, 0xc0, 0x00, 0x00, 0x00, + 0x08, 0x7f, 0xf0, 0x70, 0x1c, 0x7f, 0xf0, 0x70, 0x1c, 0x6a, + 0xb0, 0x00, 0x00, 0x08, 0x2f, 0xfc, 0x70, 0x00, 0x70, 0x00, + 0x70, 0x00, 0x2a, 0xa8, 0x00, 0x00, 0x08, 0x7f, 0xf0, 0x70, + 0x1c, 0x70, 0x1c, 0x70, 0x1c, 0x6a, 0xb0, 0x00, 0x00, 0x07, + 0x7f, 0xf0, 0x70, 0x00, 0x7f, 0xc0, 0x70, 0x00, 0x6a, 0xa0, + 0x00, 0x00, 0x07, 0x7f, 0xf0, 0x70, 0x00, 0x7f, 0xc0, 0x70, + 0x00, 0x60, 0x00, 0x00, 0x00, 0x09, 0x3f, 0xfc, 0x00, 0x70, + 0x00, 0x00, 0x70, 0xff, 0x00, 0x70, 0x1c, 0x00, 0x2a, 0xbc, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x70, 0x1c, 0x70, 0x1c, 0x7f, + 0xfc, 0x70, 0x1c, 0x70, 0x1c, 0x00, 0x00, 0x07, 0xff, 0xf0, + 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0xaa, 0xa0, 0x00, 0x00, + 0x08, 0x0f, 0xfc, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x70, + 0x70, 0x2a, 0x40, 0x00, 0x00, 0x08, 0x70, 0x2c, 0x72, 0xc0, + 0x7f, 0x00, 0x72, 0xc0, 0x70, 0x28, 0x00, 0x00, 0x07, 0x70, + 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6a, 0xa0, 0x00, + 0x00, 0x0a, 0x70, 0x02, 0xc0, 0x7c, 0x09, 0xc0, 0x77, 0x2d, + 0xc0, 0x71, 0xb1, 0xc0, 0x60, 0xc1, 0x80, 0x00, 0x00, 0x00, + 0x09, 0x70, 0x07, 0x00, 0x77, 0x07, 0x00, 0x71, 0xc7, 0x00, + 0x70, 0x77, 0x00, 0x60, 0x06, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x2f, 0xf0, 0x70, 0x1c, 0x70, 0x1c, 0x70, 0x1c, 0x2a, 0xa0, + 0x00, 0x00, 0x08, 0x7f, 0xf0, 0x70, 0x1c, 0x7f, 0xf0, 0x70, + 0x00, 0x60, 0x00, 0x00, 0x00, 0x08, 0x2f, 0xf0, 0x70, 0x1c, + 0x70, 0x1c, 0x71, 0xdc, 0x2a, 0xa0, 0x00, 0x1c, 0x00, 0x00, + 0x08, 0x7f, 0xf0, 0x70, 0x1c, 0x7f, 0xc0, 0x70, 0x70, 0x60, + 0x18, 0x00, 0x00, 0x07, 0x2f, 0xf0, 0x70, 0x00, 0x2f, 0xc0, + 0x00, 0xb0, 0xbf, 0xc0, 0x00, 0x00, 0x07, 0xff, 0xf0, 0x0b, + 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, + 0x70, 0x1c, 0x70, 0x1c, 0x70, 0x1c, 0x70, 0xdc, 0x1f, 0x1c, + 0x00, 0x00, 0x08, 0xf0, 0x1c, 0xb0, 0x1c, 0x70, 0xb0, 0x72, + 0xc0, 0x7f, 0x00, 0x00, 0x00, 0x0b, 0xf0, 0x00, 0xb0, 0xb0, + 0x00, 0x70, 0x70, 0xc0, 0x70, 0x72, 0x72, 0xc0, 0x7c, 0x1f, + 0x00, 0x00, 0x00, 0x00, 0x08, 0xf0, 0x3c, 0x1c, 0xe0, 0x07, + 0xc0, 0x1c, 0x70, 0x70, 0x1c, 0x00, 0x00, 0x09, 0x70, 0x07, + 0x00, 0x1c, 0x1c, 0x00, 0x07, 0xf0, 0x00, 0x01, 0xc0, 0x00, + 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xfc, 0x00, + 0x70, 0x07, 0x00, 0x1c, 0x00, 0xaa, 0xac, 0x00, 0x00, 0x09, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const int FONT6x6_INDEX[] = { + 62, 1, 6, + 0x0000, 0x0007, 0x000e, 0x0015, 0x001c, 0x0023, 0x002a, 0x0031, 0x0038, 0x003f, + 0x0046, 0x004d, 0x0054, 0x005b, 0x0062, 0x0069, 0x0070, 0x0077, 0x007e, 0x0085, + 0x008c, 0x0093, 0x009a, 0x00a1, 0x00a8, 0x00af, 0x00b6, 0x00bd, 0x00c4, 0x00cb, + 0x00d2, 0x00d9, 0x00e0, 0x00e7, 0x00ee, 0x00f5, 0x00fc, 0x0103, 0x010a, 0x0111, + 0x0118, 0x011f, 0x0126, 0x012d, 0x0134, 0x013b, 0x0142, 0x0149, 0x0150, 0x0157, + 0x015e, 0x0165, 0x016c, 0x0173, 0x017a, 0x0181, 0x0188, 0x018f, 0x0196, 0x019d, + 0x01a4, 0x01ab, +}; + +const byte FONT6x6_DATA[] = { + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x30, 0x30, + 0x30, 0x30, 0x00, 0x30, 0x06, 0xd8, 0xd8, 0x90, 0x00, 0x00, + 0x00, 0x06, 0x50, 0xf8, 0x50, 0xf8, 0x50, 0x00, 0x06, 0x78, + 0xa0, 0x70, 0x28, 0xf0, 0x20, 0x06, 0xc8, 0xd0, 0x20, 0x58, + 0x98, 0x00, 0x06, 0x60, 0xd0, 0x60, 0xe8, 0xd0, 0x68, 0x06, + 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x06, 0x30, 0x60, 0x60, + 0x60, 0x30, 0x00, 0x07, 0x30, 0x18, 0x18, 0x18, 0x30, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x20, 0x20, + 0xf8, 0x20, 0x20, 0x00, 0x06, 0x00, 0x00, 0x00, 0x30, 0x30, + 0x60, 0x06, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x60, 0x60, 0x00, 0x06, 0x18, 0x30, 0x60, 0xc0, + 0x80, 0x00, 0x06, 0x70, 0x98, 0xa8, 0xc8, 0x70, 0x00, 0x06, + 0x10, 0x30, 0x10, 0x10, 0x10, 0x00, 0x06, 0xf0, 0x08, 0x70, + 0x80, 0xf8, 0x00, 0x06, 0xf0, 0x08, 0x70, 0x08, 0xf0, 0x00, + 0x06, 0x30, 0x50, 0x90, 0xf8, 0x10, 0x00, 0x06, 0xf0, 0x80, + 0xf0, 0x08, 0xf0, 0x00, 0x06, 0x70, 0x80, 0xf0, 0x88, 0x70, + 0x00, 0x06, 0xf8, 0x08, 0x10, 0x20, 0x20, 0x00, 0x06, 0x70, + 0x88, 0x70, 0x88, 0x70, 0x00, 0x06, 0x70, 0x88, 0x78, 0x08, + 0x70, 0x00, 0x06, 0x60, 0x60, 0x00, 0x60, 0x60, 0x00, 0x06, + 0x60, 0x60, 0x00, 0x60, 0x20, 0x40, 0x06, 0x18, 0x30, 0x60, + 0x30, 0x18, 0x00, 0x06, 0x00, 0x78, 0x00, 0x78, 0x00, 0x00, + 0x06, 0x60, 0x30, 0x18, 0x30, 0x60, 0x00, 0x06, 0x70, 0x98, + 0x30, 0x30, 0x00, 0x30, 0x06, 0x70, 0x88, 0xb8, 0xb0, 0x80, + 0x78, 0x06, 0x70, 0x88, 0xf8, 0x88, 0x88, 0x00, 0x06, 0xf0, + 0x88, 0xf0, 0x88, 0xf0, 0x00, 0x06, 0x78, 0x80, 0x80, 0x80, + 0x78, 0x00, 0x06, 0xf0, 0x88, 0x88, 0x88, 0xf0, 0x00, 0x06, + 0xf8, 0x80, 0xf0, 0x80, 0xf8, 0x00, 0x06, 0xf8, 0x80, 0xf0, + 0x80, 0x80, 0x00, 0x06, 0x78, 0x80, 0x98, 0x88, 0x78, 0x00, + 0x06, 0x88, 0x88, 0xf8, 0x88, 0x88, 0x00, 0x06, 0x70, 0x20, + 0x20, 0x20, 0x70, 0x00, 0x06, 0x08, 0x08, 0x08, 0x88, 0x70, + 0x00, 0x06, 0x90, 0xa0, 0xc0, 0xa0, 0x90, 0x00, 0x06, 0x80, + 0x80, 0x80, 0x80, 0xf0, 0x00, 0x06, 0x88, 0xd8, 0xa8, 0x88, + 0x88, 0x00, 0x06, 0x88, 0xc8, 0xa8, 0x98, 0x88, 0x00, 0x06, + 0x70, 0x88, 0x88, 0x88, 0x70, 0x00, 0x06, 0xf0, 0x88, 0xf0, + 0x80, 0x80, 0x00, 0x06, 0x70, 0x88, 0x88, 0x88, 0x70, 0x18, + 0x06, 0xf0, 0x88, 0xf0, 0xa0, 0x98, 0x00, 0x06, 0x78, 0x80, + 0x70, 0x08, 0xf0, 0x00, 0x06, 0xf8, 0x20, 0x20, 0x20, 0x20, + 0x00, 0x06, 0x88, 0x88, 0x88, 0x88, 0x78, 0x00, 0x06, 0x88, + 0x88, 0x88, 0x50, 0x20, 0x00, 0x06, 0x88, 0x88, 0xa8, 0xd8, + 0x88, 0x00, 0x06, 0x88, 0x50, 0x20, 0x50, 0x88, 0x00, 0x06, + 0x88, 0x88, 0x50, 0x20, 0x20, 0x00, 0x06, 0xf8, 0x10, 0x20, + 0x40, 0xf8, 0x00, 0x06, 0x78, 0x60, 0x60, 0x60, 0x78, 0x00, + 0x06, 0xc0, 0x60, 0x30, 0x18, 0x08, 0x00, 0x06, 0x78, 0x18, + 0x18, 0x18, 0x78, 0x00, 0x00, 0x52, 0x41, 0x54, 0x00, 0x41, + 0x4c, 0x43, 0x4f, 0x48, 0x4f, 0x4c, 0x00, 0x53, 0x41, 0x46, + 0x45, 0x20, 0x43, 0x4f, 0x4d, 0x42, 0x49, 0x4e, 0x41, 0x54, + 0x49, 0x4f, 0x4e, 0x00, 0x42, 0x45, 0x41, 0x4b, 0x45, 0x52, + 0x00, 0x4d, 0x49, 0x43, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x4d, + 0x00, 0x56, 0x41, 0x55, 0x4c, 0x54, 0x20, 0x4b, 0x45, 0x59, + 0x00, 0x42, 0x4f, 0x4c, 0x54, 0x20, 0x43, 0x55, 0x54, 0x54, + 0x45, 0x52, 0x53, 0x00, 0x42, 0x4c, 0x4f, 0x57, 0x47, 0x55, + 0x4e, 0x00, 0x4c, 0x4f, 0x56, 0x45, 0x20, 0x50, 0x4f, 0x54, + 0x49, 0x4f, 0x4e, 0x00, 0x4d, 0x4f, 0x4e, 0x45, 0x59, 0x00, + 0x44, 0x41, 0x52, 0x54, 0x53, 0x00, 0x54, 0x41, 0x50, 0x45, + 0x00, 0x4a, 0x55, 0x4e, 0x47, 0x4c, 0x45, 0x20, 0x50, 0x4f, + 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x4d, 0x4f, 0x56, 0x49, +}; + +const uint FONT2_INDEX_SIZE = sizeof(FONT2_INDEX) / 2; +const uint FONT2_DATA_SIZE = sizeof(FONT2_DATA); +const uint FONT6x6_INDEX_SIZE = sizeof(FONT6x6_INDEX) / 2; +const uint FONT6x6_DATA_SIZE = sizeof(FONT6x6_DATA); + +const char *const ROOM_DESCR[64] = { + "Credits", nullptr, nullptr, nullptr, "Outside of Allister Center", + "Hall", "Jason's Lab", nullptr, "Allen's Lab", "Outside of the Vault", + "Inside the Vault", "Reader", "Jason's Apartment", "Jason's ransacked apartment", "Cutscene 1", + "TBD FLYSOUTH", "Cuzco Airport", "TBD INAIR", "Green Monkey Club", "In Plane", + "TBD PILFALL", "TBD COCKPIT", "TBD CRASH", "TBD SINKING", "Cutscene Jungle Walk", + "TBD TOWN", "TBD HOTEL", "TBD CANTINA", nullptr, "TBD MASSACRE", + "TBD TRADE", "TBD BRIDGE", "TBD DOCK", "TBD DRIVER", nullptr, + nullptr, "TBD SHORE", "TBD BOAT", "TBD CABIN", "TBD CAPTIVE", + nullptr, nullptr, "TBD VILLAGE", nullptr, "TBD TREE", + "TBD CANOE", "TBD INTREE", "TBD FALLS", nullptr, nullptr, + nullptr, nullptr, nullptr, nullptr, "TBD WATERFALL", + "TBD INWATER", nullptr, "Cave Bridge", nullptr, nullptr, + nullptr, "Pit with Ants", nullptr, nullptr +}; + + +const byte DEATH_SCREENS_ENG[58] = { + 0, 1, 0, 0, 0, 0, 0, 0, 2, 0, + 0, 2, 4, 2, 1, 0, 0, 0, 0, 0, + 0, 2, 7, 7, 4, 6, 7, 10, 4, 2, + 0, 0, 0, 0, 5, 5, 3, 3, 3, 5, + 8, 8, 11, 9, 8, 12, 0, 1, 9, 8, + 8, 0, 5, 8, 0, 12, 12, 11 +}; + +const byte DEATH_SCREENS_ENG_DEMO[34] = { + 1, 2, 1, 1, 1, 1, 1, 1, 4, 1, + 3, 4, 2, 4, 2, 1, 1, 1, 1, 1, + 1, 4, 2, 4, 2, 4, 2, 4, 4, 4, + 1, 1, 1, 1 +}; + +const char *const DEATH_TEXT_ENG[58] = { + "SAM SALVADOR SPOTS YOU AND LETS YOU HAVE IT.", + "WHILE TAKING A MOONLIGHT SWIM YOU DISCOVER THAT PIRANHA REALLY CAN STRIP FLESH TO THE BONE.", + "THE GUARD FILLS YOU FULL OF HOLES BEFORE TOSSING YOU TO THE PIRANHA.", + "YOU'RE ONLY ABLE TO SWIM HALFWAY ACROSS THE RIVER BEFORE RUNNING OUT OF AIR. " + "YOU MAKE SO MUCH NOISE GASPING FOR BREATH THAT SAM EASILY FINDS YOU AND LEAVES " + "YOU IN THE RIVER PERMANENTLY.", + "SAM SALVADOR NOTICES SOMEONE HAS BEEN PLAYING WITH THE CARGO. " + "HE TRACKS YOU DOWN AND LETS YOU HAVE IT.", + "THE GUARD COMES AROUND THE CORNER. HE DECIDES THAT THREE LEAD SLUGS WILL " + "TEACH YOU TO BE MORE POLITE.", + "THE CAPTAIN IS WAITING OUTSIDE THE DOOR.", + "THE CAPTAIN'S RANDOM SHOOTING FINALLY FINDS ITS TARGET.", + "THE CRATE OUTSIDE THE WINDOW EXPLODES, DESTROYING THE SHIP. " + "UNFORTUNATELY, YOU'RE STILL ABOARD.", + "THE DOOR WAS NOT BARRED AND THE CAPTAIN WALKS RIGHT IN AND PARTS YOUR HAIR.", + + "", + "YOU RUN OUT ON DECK, THEN REALIZE THAT MAYA IS STILL TIED UP. " + "AS YOU TURN TO GO BACK THE BOAT BLOWS UP.", + "AFTER YOU FAIL TO PROVE YOUR DIVINITY THE NATIVES EAT YOU FOR LUNCH.", + "THIS IS THE GENERIC DEATH SCENE", + "YOU ONLY MAKE IT HALFWAY ACROSS THE RIVER BEFORE THE PIRANHA STRIKE.", + "WITH NOTHING TO PROTECT HIM FROM THE HAIL OF BULLETS ALLEN IS QUICKLY GUNNED DOWN. " + "JASON AND MAYA SOON FOLLOW...", + "THE COMBINATION OF THE WIND AND GUNFIRE KNOCK THE CORRUGATED IRON OVER, " + "LEAVING YOU WITHOUT PROTECTION.", + "WITHOUT SUFFICIENT AMMUNITION, ALLEN IS UNABLE TO HOLD OFF THE ATTACKERS FOR LONG. " + "THIS RESULTS IN A SERIOUS CASE OF LEAD POISONING. ADDITIONAL AMMUNITION SHOULD " + "HAVE BEEN PURCHASED AT THE RIO BLANCO TRADING POST (CHAPTER 6).", + "ALLEN IS A MARVELOUS SHOT, BUT HIS AMMUNITION IS NOT UNLIMITED. " + "SOON IT IS ALL OVER.", + "THE PILOT FEELS YOU ARE TOO CLOSE AND PULLS THE TRIGGER.", + + "THE PILOT SHOOTS YOU IN THE HEART, THEN TOSSES YOUR LIFELESS BODY OUT THE DOOR.", + "THE PLANE CRASHES INTO THE JUNGLE CANOPY AT 200 MPH.", + "THE CANOE HITS THE ROCKS AND CAPSIZES, AND THE PIRANHA MAKE YOU THEIR LUNCH GUESTS.", + "YOU TAKE THE WRONG BRANCH AND ACCIDENTALLY DISCOVER THE FOURTH TALLEST WATERFALL " + "IN SOUTH AMERICA.", + "YOU TAKE THE WRONG BRANCH AND DISCOVER A VERY HUNGRY TRIBE OF CANNIBALS.", + "YOU TAKE THE WRONG BRANCH AND BECOME LOST IN THE WINDING WATERWAYS. " + "YOU WANDER UNTIL YOU STARVE TO DEATH.", + "YOU TAKE THE WRONG BRANCH AND BECOME TRAPPED IN THE RAPIDS. " + "EVENTUALLY YOU AND MAYA ARE CRUSHED BETWEEN THE ROCKS.", + "YOU WAIT AROUND FOR SOME TIME, BUT HANS STROHEIM NEVER SPEAKS TO YOU AGAIN. " + "FINALLY YOU RETURN HOME KNOWING YOU HAVE FAILED.", + "DECIDING THAT YOU THREATEN HIM AND HIS WORK, HANS STROHEIM HAS THE NATIVES " + "IN THE VILLAGE KILL YOU.", + "YOU DO NOT GET FAR ENOUGH AWAY BEFORE THE DYNAMITE EXPLODES AND YOU ARE BLOWN " + "INTO A THOUSAND PIECES.", + + "YOU ARE STANDING SO CLOSE TO THE ENTRANCE WHEN SANCEZ AND HIS MEN BREAK THROUGH " + "THE WALL THAT YOU ARE QUICKLY SPOTTED AND SHOT", + "THE AMAZON SENTINELS SPOT YOU AND FILL YOU FULL OF ARROWS.", + "SAM MAY BE UGLY, BUT HE'S NOT DEAF. HE HEARS ALL THE NOISE YOU ARE MAKING AND " + "CANCELS YOUR BOARDING PASS.", + "WITH THE BAR OFF THE DOOR THE CAPTAIN WALTZES IN AND BLOWS YOU AWAY", + "THE BEAR WANDERS OFF INTO THE WOODS AND DISTURBS THE TWO LOVEBIRDS. " + "WHEN THEY COME OUT THEY FIND YOU AND PUT YOU IN THE BIG HOUSE FOR TWENTY YEARS.", + "WHEN YOU DO NOT LEAVE THE SECURITY AREA QUICKLY ENOUGH YOU ARE ARRESTED AND CONVICTED " + "AS A COMMIE SPY. YOU EMBARK ON A NEW CAREER STAMPING OUT LICENSE PLATES.", + "THE HUNGRY BEAR SPOTS YOU AND DECIDES YOU WILL MAKE A NICE APPETIZER.", + "YOU DISTURB THE BEAR'S LUNCH AND HE EATS YOU FOR DESSERT.", + "AFTER FAILING TO FIND ANY LUNCH AT THE GARBAGE CAN THE BEAR EATS YOU INSTEAD.", + "THE SUSPICIOUS LIBRARIAN CALLS SECURITY AND YOU ARE SENT TO JAIL.", + + "YOU PLUMMET 10,000 FEET TO YOUR DEATH.", + "EL LOCO FLIES INTO AN INSANE RAGE AND BEATS YOU TO A BLOODY PULP.", + "THE WOMAN WALKS OUT THE DOOR AND NEVER RETURNS. YOU SPEND THE REST OF YOUR LIFE " + "IN A FUTILE ATTEMPT TO LOCATE ALLEN.", + "YOU SLIP OFF THE PLATFORM AND FALL TO YOUR DEATH.", + "YOU SLIP OFF THE PLATFORM AND FALL TO YOUR DEATH.", + "YOU COME TOO CLOSE TO THE POWERFUL JAWS OF THE ANT AND HE SNIPS YOU IN TWO BEFORE " + "DEVOURING YOU.", + "B.O.B. HAS A FLAW IN HIS PROGRAMMING THAT DIRECTS HIM TO SHOOT FIRST AND ASK QUESTIONS LATER.", + "THE PLANE SINKS AND THE PIRHANA ATTACK BEFORE YOU EVEN GET OUT THE DOOR.", + "MAYA FALLS OFF THE END OF THE BROKEN BRIDGE.", + "YOUR WEIGHT IS JUST ENOUGH TO CAUSE THE REMAINING SUPPORT CABLE TO SNAP AND YOU " + "FALL TO THE BOTTOM OF THE GORGE.", + + "EVEN WITH REPAIRS THE BRIDGE IS NOT STRONG ENOUGH TO HOLD TWO PEOPLE.", + "SANCHEZ AND HIS MEN FIND YOU AND HOLD FIRING SQUAD PRACTICE.", + "THE TWO GUARDS ARE DISTURBED IN THEIR LOVE NEST AND COME LOOKING FOR ANYONE ACTING SUSPICIOUS. " + "THEY FIND YOU AND SEND YOU UP THE RIVER.", + "THE PARACHUTE IS NOT LARGE ENOUGH TO SUPPORT YOU, AND YOU HIT THE TREES AT 140 M.P.H.", + "SANCHEZ AND HIS MEN FOLLOW YOU ACROSS THE BRIDGE AND CUT YOU DOWN IN A HAIL OF GUNFIRE", + "YOU TRIED TO STAB THE ANT BUT HIS SHELL IS TOO DIFFICULT TO PENETRATE. " + "YOU NOTICE A SLIGHT CUT IN THE SHELL UNDERNEATH BUT YOU CAN'T GET TO IT " + "AND HE SNIPS YOU INTO DELICIOUS MEATY CHUNKS.", + "AFTER THE ANT FINISHES SUCKING ALL OF THE SAP OUT OF THE VINE HE TURNS HIS ATTENTION BACK TO YOU " + "AND BITES YOUR HEAD OFF.", + "THE CANTINA OWNER NOTICES YOU ARE TRYING TO STEAL OBJECTS FROM THE TABLES. " + "TWENTY YEARS LATER YOU ARE RELEASED FROM A SOUTH AMERICAN PRISON." +}; + +const char *const DEATH_TEXT_ENG_DEMO[34] = { + "SAM SALVADOR SPOTS YOU AND LETS YOU HAVE IT.", + "WHILE TAKING A MOONLIGHT SWIM YOU DISCOVER THAT PIRANHA REALLY CAN STRIP FLESH TO THE BONE.", + "THE GUARD FILLS YOU FULL OF HOLES BEFORE TOSSING YOU TO THE PIRANHA.", + "YOU'RE ONLY ABLE TO SWIM HALFWAY ACROSS THE RIVER BEFORE RUNNING OUT OF AIR. YOU MAKE SO MUCH NOISE GASPING FOR BREATH THAT SAM EASILY FINDS YOU AND LEAVES YOU IN THE RIVER PERMANENTLY.", + "SAM SALVADOR NOTICES SOMEONE HAS BEEN PLAYING WITH THE CARGO. HE TRACKS YOU DOWN AND LETS YOU HAVE IT.", + "THE GUARD COMES AROUND THE CORNER. HE DECIDES THAT THREE LEAD SLUGS WILL TEACH YOU TO BE MORE POLITE.", + "THE CAPTAIN IS WAITING OUTSIDE THE DOOR.", + "THE CAPTAIN'S RANDOM SHOOTING FINALLY FINDS ITS TARGET.", + "THE CRATE OUTSIDE THE WINDOW EXPLODES, DESTROYING THE SHIP. UNFORTUNATELY, YOU'RE STILL ABOARD.", + "THE DOOR WAS NOT BARRED AND THE CAPTAIN WALKS RIGHT IN AND PARTS YOUR HAIR.", + "", + "YOU RUN OUT ON DECK, THEN REALIZE THAT MAYA IS STILL TIED UP. AS YOU TURN TO GO BACK THE BOAT BLOWS UP.", + "AFTER YOU FAIL TO PROVE YOUR DIVINITY THE NATIVES EAT YOU FOR LUNCH.", + "THIS IS THE GENERIC DEATH SCENE", + "YOU ONLY MAKE IT HALFWAY ACROSS THE RIVER BEFORE THE PIRANHA STRIKE.", + "WITH NOTHING TO PROTECT HIM FROM THE HAIL OF BULLETS ALLEN IS QUICKLY GUNNED DOWN. JASON AND MAYA SOON FOLLOW...", + "THE COMBINATION OF THE WIND AND GUNFIRE KNOCK THE CORRUGATED IRON OVER, LEAVING YOU WITHOUT PROTECTION.", + "WITHOUT SUFFICIENT AMMUNITION, ALLEN IS UNABLE TO HOLD OFF THE ATTACKERS FOR LONG. THIS RESULTS IN A SERIOUS CASE OF LEAD POISONING.", + "ALLEN IS A MARVELOUS SHOT, BUT HIS AMMUNITION IS NOT UNLIMITED. SOON IT IS ALL OVER.", + "THE PILOT FEELS YOU ARE TOO CLOSE AND PULLS THE TRIGGER.", + "THE PILOT SHOOTS YOU IN THE HEAD, THEN TOSSES YOUR LIFELESS", + "THE PLANE CRASHES INTO THE JUNGLE CANOPY AT 200 MPH.", + "THE CANOE HITS THE ROCKS AND CAPSIZES, AND THE PIRANHA MAKE YOU THEIR LUNCH GUESTS.", + "YOU ACCIDENTALLY DISCOVER THE FOURTH TALLEST WATERFALL IN SOUTH AMERICA.", + "YOU DISCOVER A VERY HUNGRY TRIBE OF CANNIBALS.", + "YOU BECOME LOST IN THE WINDING WATERWAYS AND WANDER UNTIL YOU STARVE TO DEATH.", + "YOU BECOME TRAPPED IN THE RAPIDS AND ARE CRUSHED BETWEEN THE ROCKS.", + "YOU WAIT AROUND FOR SOME TIME, BUT HANS STROHEIM NEVER SPEAKS TO YOU AGAIN. FINALLY YOU RETURN HOME KNOWING YOU HAVE FAILED.", + "DECIDING THAT YOU THREATEN HIM AND HIS WORK, HANS STROHEIM HAS THE NATIVES IN THE VILLAGE KILL YOU.", + "YOU DO NOT GET FAR ENOUGH AWAY BEFORE THE DYNAMITE EXPLODES AND YOU ARE BLOWN INTO A THOUSAND PIECES.", + "STANDING OUT IN THE OPEN YOU ARE EXPOSED TO THE HAIL OF BULLETS FROM SANCHEZ' MEN.", + "THE AMAZON SENTINELS SPOT YOU AND FILL YOU FULL OF ARROWS.", + "SAM MAY BE UGLY, BUT HE'S NOT DEAF. HE HEARS ALL THE NOISE YOU ARE MAKING AND CANCELS YOUR BOARDING PASS.", + "WITH THE BAR OFF THE DOOR THE CAPTAIN WALTZES IN AND BLOWS YOU AWAY" +}; + +const char *const INVENTORY_NAMES_ENG[85] = { + "RAT", "ALCOHOL", "SAFE COMBINATION", "BEAKER", "MICROFILM", + "VAULT KEY", "BOLT CUTTERS", "BLOWGUN", "LOVE POTION", "MONEY", + "DARTS", "TAPE", "JUNGLE POTION", "MOVIE", "CABINET KEY", + "DISPLAY CASE KEY", "FLITCH'S CAR KEYS", "COAT HANGER", + "CROWBAR", "COMPASS", "MAP", "LETTER OPENER", "LETTER", + "DECODER", "DIPPED DART", "LOADED BLOWGUN", "CARD", "JERRYCAN", + "CIGARETTES", "BIKE PUMP", "PARACHUTE", "PESO", "PEPPERS", + "MACHETE", "POISON ROOT", "AMMUNITION", "PADDLE", "FISHING NET", + "RAT TRAP", "CHEESE", "LOADED TRAP", "KNIFE", "CHOPPED PEPPERS", + "LIGHTER", "LADDER", "SMALL POLE", "JEEP KEY", "CHAIN", "ARROW", + "FILLED JERRY CAN", "EXPLOSIVES", "GEIGER COUNTER", "VINE", + "GOLD NUGGET", "HOLLOW REED", "AMAZON QUEEN KEYS", "FISHING POLE", + "HARPOON", "RAG", "BOTTLE OF RUM", "RAG IN BOTTLE", "MOLOTOV COCKTAIL", + "JUNGLE PLANT", "LADLE", "WORM", "FISH", "FIREWORKS", "BAITED POLE", + "FILLED LADLE", "EMERALD", "SMALL KEY", "SCROLL", "LIT EXPLOSIVES", + "LIGHTER", "BROKEN SPEAR", "SHOE LACES", "TORCH", "LACES AND SPEAR", + "KNIFE SPEAR", "GARBAGE CAN", "RAFT", "INFLATED RAFT", + "JASON'S CAR KEYS", "PESO BILLS", "PLANK" +}; + +const int COMBO_TABLE[85][4] = { + { -1, -1, -1, -1 }, + { 12, 3, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { 24, 25, -1, -1 }, + { 10, 24, -1, -1 }, + { -1, -1, -1, -1 }, + { 8, 24, -1, -1 }, + { -1, -1, -1, -1 }, + { 1, 3, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { 7, 25, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { 80, 81, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { 41, 42, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { 39, 40, -1, -1 }, + { 38, 40, -1, -1 }, + { -1, -1, -1, -1 }, + { 32, 42, 77, 78 }, + { -1, -1, -1, -1 }, + { 60, 61, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { 73, 72, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { 64, 67, -1, -1 }, + { -1, -1, -1, -1 }, + { 59, 60, -1, -1 }, + { 58, 60, -1, -1 }, + { 43, 61, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { 56, 67, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { 50, 72, -1, -1 }, + { 75, 77, -1, -1 }, + { 74, 77, -1, -1 }, + { -1, -1, -1, -1 }, + { 41, 78, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { 29, 81, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 }, + { -1, -1, -1, -1 } +}; + +const char *const NO_HELP_MESSAGE_ENG = +"WE ARE UNABLE TO PROVIDE YOU WITH ANY MORE HINTS. YOUR IQ \ +HAS DECREASED SO FAR THAT WE CAN NO LONGER PUT THE HINTS IN TERMS \ +YOU CAN UNDERSTAND."; +const char *const NO_HINTS_MESSAGE_ENG = "THE HELP SYSTEM HAS BEEN TURNED OFF FOR THIS GAME."; +const char *const RIVER_HIT1_ENG = "YOU HIT THE ROCKS AND THE CANOE BEGINS TO LEAK."; +const char *const RIVER_HIT2_ENG = "YOU HIT THE ROCKS AND THE CANOE DEVELOPS SERIOUS LEAKS."; +const char *const BAR_MESSAGE_ENG = "YOU ARE TOO BUSY TRYING TO KEEP FROM SINKING TO DO THAT"; +const char *const HELPLVLTXT_ENG[3] = { " LEVEL 1 ", " LEVEL 2 ", " LEVEL 3 " }; + +const char *const IQLABELS_ENG[9] = { + "VEGETABLE", + "NEANDERTHAL", + "LOBOTOMIZED", + "DENSE", + "AVERAGE", + "INTELLIGENT", + "MURPHYITE", + "BRILLIANT", + "GENIUS" +}; + +const char *const CANT_GET_THERE_ENG = "YOU CAN'T GET THERE FROM HERE."; + +}; diff --git a/devtools/create_access/amazon_resources.h b/devtools/create_access/amazon_resources.h new file mode 100644 index 0000000000..fa281f8f7b --- /dev/null +++ b/devtools/create_access/amazon_resources.h @@ -0,0 +1,62 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef __AMAZON_RESOURCES_H__ +#define __AMAZON_RESOURCES_H__ + +#include "common/scummsys.h" + +namespace Amazon { + +#define AMAZON_NUM_CURSORS 10 +extern const byte *const CURSORS[AMAZON_NUM_CURSORS]; +extern const uint CURSOR_SIZES[AMAZON_NUM_CURSORS]; + +extern const int FONT2_INDEX[]; +extern const byte FONT2_DATA[]; +extern const int FONT6x6_INDEX[]; +extern const byte FONT6x6_DATA[]; +extern const uint FONT2_INDEX_SIZE; +extern const uint FONT2_DATA_SIZE; +extern const uint FONT6x6_INDEX_SIZE; +extern const uint FONT6x6_DATA_SIZE; + +extern const char *const ROOM_DESCR[64]; +extern const char *const DEATH_TEXT_ENG[58]; +extern const char *const DEATH_TEXT_ENG_DEMO[34]; +extern const byte DEATH_SCREENS_ENG[58]; +extern const byte DEATH_SCREENS_ENG_DEMO[34]; +extern const char *const INVENTORY_NAMES_ENG[85]; +extern const int COMBO_TABLE[85][4]; + +extern const char *const NO_HELP_MESSAGE_ENG; +extern const char *const NO_HINTS_MESSAGE_ENG; +extern const char *const RIVER_HIT1_ENG; +extern const char *const RIVER_HIT2_ENG; +extern const char *const BAR_MESSAGE_ENG; +extern const char *const HELPLVLTXT_ENG[3]; +extern const char *const IQLABELS_ENG[9]; +extern const char *const CANT_GET_THERE_ENG; + +}; + +#endif diff --git a/devtools/create_access/create_access_dat.cpp b/devtools/create_access/create_access_dat.cpp new file mode 100644 index 0000000000..0e57f76395 --- /dev/null +++ b/devtools/create_access/create_access_dat.cpp @@ -0,0 +1,430 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +// Disable symbol overrides so that we can use system headers. +#define FORBIDDEN_SYMBOL_ALLOW_ALL + +// HACK to allow building with the SDL backend on MinGW +// see bug #1800764 "TOOLS: MinGW tools building broken" +#ifdef main +#undef main +#endif // main + +#include +#include +#include +#include "common/language.h" +#include "common/rect.h" +#include "create_access_dat.h" +#include "amazon_resources.h" +#include "martian_resources.h" + +/** + * Format of the access.dat file that will be created: + * 4 Bytes - Magic string 'SVMA' to identify valid data file + * 2 bytes - Version number + * 2 Bytes - Number of different games data in the data file + * Series of index entries identifying each game: + * 1 byte - Game type: 1 = Amazon, 2 = Martian Memorandum, 3 = Noctropolis + * 1 byte - disc type: 0 = Floppy, 1 = CD, 2 = Common data shared across + * all variations of the given game + * 1 byte - Is Demo: 0 = Full game, 1 = Demo + * 1 byte - Language (Common::Language) + * 4 bytes - File offset for the data for the game + */ + +File outputFile; + +void writeHeader(int numExecutables); +void writeAmazonCommonData(); +void writeMartianCommonData(); +bool processExecutable(int idx, const char *name); + +void NORETURN_PRE error(const char *s, ...) { + printf("%s\n", s); + exit(1); +} + +int main(int argc, char *argv[]) { + const uint NUM_COMMON_ENTRIES = 2; + + if (argc < 3) { + printf("Format: %s output_filename executable1 [executable2 ..]\n", argv[0]); + exit(0); + } + + // Create the new data file for output + outputFile.open(argv[1], kFileWriteMode); + writeHeader(argc - 2 + NUM_COMMON_ENTRIES); + + // Write out entries containing common data for the games + writeAmazonCommonData(); + writeMartianCommonData(); + + // Iterate through processing each specified executable + outputFile.seek(0, SEEK_END); + for (int idx = 2; idx < argc; ++idx) { + if (!processExecutable(idx - 2 + NUM_COMMON_ENTRIES, argv[idx])) + break; + } + + // Close the output file + outputFile.close(); +} + +void writeHeader(int numExecutables) { + // Write out magic string + const char *MAGIC_STR = "SVMA"; + outputFile.write(MAGIC_STR, 4); + + // Write out version number + outputFile.writeWord(VERSION_NUMBER); + + // Write out the number of entries the data file will contain + outputFile.writeWord(numExecutables); + + // Write out padding for index entries that will be written + outputFile.writeByte(0, 8 * numExecutables); +} + +void writeAmazonCommonData() { + // Write out the header entry + outputFile.seek(8); + outputFile.writeByte(1); // Amazon + outputFile.writeByte(2); // Common data + outputFile.writeByte(0); + outputFile.writeByte(0); + outputFile.writeLong(outputFile.size()); + + // Write out cursor list + outputFile.seek(0, SEEK_END); + outputFile.writeWord(AMAZON_NUM_CURSORS); + + for (uint idx = 0; idx < AMAZON_NUM_CURSORS; ++idx) { + outputFile.writeWord(Amazon::CURSOR_SIZES[idx]); + outputFile.write(Amazon::CURSORS[idx], Amazon::CURSOR_SIZES[idx]); + } + + // Write out font data + outputFile.writeWord(Amazon::FONT2_INDEX_SIZE); + for (uint idx = 0; idx < Amazon::FONT2_INDEX_SIZE; ++idx) + outputFile.writeWord(Amazon::FONT2_INDEX[idx]); + + outputFile.writeWord(Amazon::FONT2_DATA_SIZE); + outputFile.write(Amazon::FONT2_DATA, Amazon::FONT2_DATA_SIZE); + + outputFile.writeWord(Amazon::FONT6x6_INDEX_SIZE); + for (uint idx = 0; idx < Amazon::FONT6x6_INDEX_SIZE; ++idx) + outputFile.writeWord(Amazon::FONT6x6_INDEX[idx]); + + outputFile.writeWord(Amazon::FONT6x6_DATA_SIZE); + outputFile.write(Amazon::FONT2_DATA, Amazon::FONT6x6_DATA_SIZE); +} + + +void writeMartianCommonData() { + // Write out the header entry + outputFile.seek(16); + outputFile.writeByte(2); // Martian + outputFile.writeByte(2); // Common data + outputFile.writeByte(0); + outputFile.writeByte(0); + outputFile.writeLong(outputFile.size()); + + // Write out cursor list + outputFile.seek(0, SEEK_END); + outputFile.writeByte(MARTIAN_NUM_CURSORS); + + for (uint idx = 0; idx < MARTIAN_NUM_CURSORS; ++idx) { + outputFile.writeWord(Martian::CURSOR_SIZES[idx]); + outputFile.write(Martian::CURSORS[idx], Martian::CURSOR_SIZES[idx]); + } +} + +bool processExecutable(int idx, const char *name) { + uint dataSegmentOffset; + uint filenamesOffset, numFilenames; + uint charsStart, charsEnd; + uint roomsStart, roomsEnd, numRooms; + uint travelPosOffset; + const char *const *roomDescs; + const byte *deathScreens; + const char *const *deathText; + uint numDeaths; + uint numItems; + const char *const *itemNames; + const int *comboTable; + byte gameId = 0, discType = 0, demoType = 0; + byte language = Common::EN_ANY; + + // Open up the file for access + File exeFile; + if (!exeFile.open(name)) { + printf("Could not open file - %s\n", name); + return false; + } + + // Total up the first 256 bytes of the executable as a simplified + // means of identifying the different executables we support + uint fileChecksum = 0; + for (int idx = 0; idx < 256; ++idx) + fileChecksum += exeFile.readByte(); + + switch (fileChecksum) { + case 11899: + // Amazon English floppy + gameId = 1; + dataSegmentOffset = 0xC8C0; + filenamesOffset = dataSegmentOffset + 0x3628; + numFilenames = 100; + charsStart = dataSegmentOffset + 0x4234; + charsEnd = dataSegmentOffset + 0x49c6; + roomsStart = dataSegmentOffset + 0x35a8; + roomsEnd = dataSegmentOffset + 0x4234; + travelPosOffset = dataSegmentOffset + 0x5ff7; + numRooms = 64; + roomDescs = &Amazon::ROOM_DESCR[0]; + deathScreens = Amazon::DEATH_SCREENS_ENG; + deathText = &Amazon::DEATH_TEXT_ENG[0]; + numDeaths = sizeof(Amazon::DEATH_SCREENS_ENG); + numItems = 85; + itemNames = &Amazon::INVENTORY_NAMES_ENG[0]; + comboTable = &Amazon::COMBO_TABLE[0][0]; + break; + + case 12360: + // Amazon CD English + gameId = 1; + discType = 1; + dataSegmentOffset = 0xd370; + filenamesOffset = dataSegmentOffset + 0x3EA0; + numFilenames = 116; + charsStart = dataSegmentOffset + 0x4BDC; + charsEnd = dataSegmentOffset + 0x5AF4; + roomsStart = dataSegmentOffset + 0x3E20; + roomsEnd = dataSegmentOffset + 0x4BDC; + travelPosOffset = dataSegmentOffset + 0x7125; + numRooms = 64; + roomDescs = &Amazon::ROOM_DESCR[0]; + deathScreens = Amazon::DEATH_SCREENS_ENG; + deathText = &Amazon::DEATH_TEXT_ENG[0]; + numDeaths = sizeof(Amazon::DEATH_SCREENS_ENG); + numItems = 85; + itemNames = &Amazon::INVENTORY_NAMES_ENG[0]; + comboTable = &Amazon::COMBO_TABLE[0][0]; + break; + + case 11748: + // Amazon English Demo + gameId = 1; + discType = 0; + demoType = 1; + dataSegmentOffset = 0xa2a0; + filenamesOffset = dataSegmentOffset + 0x242C; + numFilenames = 100; + charsStart = dataSegmentOffset + 0x2F1A; + charsEnd = dataSegmentOffset + 0x34FB; + roomsStart = dataSegmentOffset + 0x23AC; + roomsEnd = dataSegmentOffset + 0x2F1A; + travelPosOffset = dataSegmentOffset + 0x494E; + numRooms = 64; + roomDescs = &Amazon::ROOM_DESCR[0]; + deathScreens = Amazon::DEATH_SCREENS_ENG; + deathText = &Amazon::DEATH_TEXT_ENG[0]; + numDeaths = sizeof(Amazon::DEATH_SCREENS_ENG); + numItems = 85; + itemNames = &Amazon::INVENTORY_NAMES_ENG[0]; + comboTable = &Amazon::COMBO_TABLE[0][0]; + break; + + case 1224: + // Martian Memorandum English packed + printf("Martian Memorandum provided that's packed with EXEPACK.\n"); + printf("It needs to be first unpacked before it can be used with this tool.\n"); + return false; + + case 0: + // Martian Memorandum English + gameId = 2; + dataSegmentOffset = 0x8d78; + filenamesOffset = dataSegmentOffset + 0x373A; + numFilenames = 80; + charsStart = dataSegmentOffset + 0x40F2; + charsEnd = dataSegmentOffset + 0x46F8; + roomsStart = dataSegmentOffset + 0x36DA; + roomsEnd = dataSegmentOffset + 0x40F2; + travelPosOffset = dataSegmentOffset + 0x58E9; + numRooms = 48; + roomDescs = &Martian::ROOM_DESCR[0]; + deathScreens = Martian::DEATH_SCREENS_ENG; + deathText = &Martian::DEATH_TEXT_ENG[0]; + numDeaths = sizeof(Martian::DEATH_SCREENS_ENG); + numItems = 85; + itemNames = &Martian::INVENTORY_NAMES_ENG[0]; + comboTable = nullptr; + break; + + default: + printf("Unknown game executable specified - %s\n", name); + exeFile.close(); + return false; + } + + // Write out header entry + uint outputOffset = outputFile.size(); + outputFile.seek(8 + idx * 8); + outputFile.writeByte(gameId); + outputFile.writeByte(discType); + outputFile.writeByte(demoType); + outputFile.writeByte(language); + outputFile.writeLong(outputOffset); + outputFile.seek(0, SEEK_END); + + // Write out list of AP filenames + outputFile.writeWord(numFilenames); + for (uint idx = 0; idx < numFilenames; ++idx) { + exeFile.seek(filenamesOffset + idx * 2); + uint nameOffset = exeFile.readWord(); + + exeFile.seek(dataSegmentOffset + nameOffset); + outputFile.writeString(exeFile); + } + + // Write out the character list + exeFile.seek(charsStart); + Common::Array charOffsets; + charOffsets.push_back(exeFile.readWord()); + assert((dataSegmentOffset + charOffsets[0] - exeFile.pos()) < 512); + + while (exeFile.pos() < (dataSegmentOffset + charOffsets[0])) + charOffsets.push_back(exeFile.readWord()); + + outputFile.writeWord(charOffsets.size()); + charOffsets.push_back(charsEnd); + for (uint idx = 0; idx < charOffsets.size() - 1; ++idx) { + if (charOffsets[idx] == 0) { + outputFile.writeWord(0); + } else { + uint nextOffset = 0xffff; + for (uint idx2 = 0; idx2 < charOffsets.size(); ++idx2) { + if (charOffsets[idx2] && charOffsets[idx2] > charOffsets[idx] && charOffsets[idx2] < nextOffset) + nextOffset = charOffsets[idx2]; + } + uint size = nextOffset - charOffsets[idx]; + + exeFile.seek(dataSegmentOffset + charOffsets[idx]); + outputFile.writeWord(size); + outputFile.write(exeFile, size); + } + } + + // Write out the room data + Common::Array roomOffsets; + Common::Array travelPos; + + exeFile.seek(roomsStart); + for (uint idx = 0; idx < numRooms; ++idx) + roomOffsets.push_back(exeFile.readWord()); + roomOffsets.push_back(roomsEnd); + + exeFile.seek(travelPosOffset); + for (uint idx = 0; idx < numRooms; ++idx) { + int16 xp = (int16)exeFile.readWord(); + int16 yp = (int16)exeFile.readWord(); + travelPos.push_back(Common::Point(xp, yp)); + } + + outputFile.writeWord(numRooms); + for (uint idx = 0; idx < numRooms; ++idx) { + uint dataSize = 0; + + if (roomOffsets[idx] == 0) { + dataSize = 0; + } else { + // Find the offset of the next higher entry that's non-zero + uint offset = 0; + for (uint idx2 = idx + 1; !offset; ++idx2) + offset = roomOffsets[idx2]; + dataSize = offset - roomOffsets[idx]; + exeFile.seek(dataSegmentOffset + roomOffsets[idx]); + } + + // Write out the room description (used only by the debugger) + outputFile.writeString(roomDescs[idx]); + + // Write out travel position + outputFile.writeWord((uint16)travelPos[idx].x); + outputFile.writeWord((uint16)travelPos[idx].y); + + // Write out the data for the room + outputFile.writeWord(dataSize); + if (dataSize > 0) + outputFile.write(exeFile, dataSize); + } + + // Write out the deaths list + outputFile.writeWord(numDeaths); + for (uint idx = 0; idx < numDeaths; ++idx) { + // Write out the screen number and text + outputFile.writeByte(deathScreens[idx]); + outputFile.writeString(deathText[idx]); + } + + // Write out inventory data + outputFile.writeWord(numItems); + for (uint idx = 0; idx < numItems; ++idx) { + outputFile.writeString(itemNames[idx]); + + if (comboTable == nullptr) { + for (uint cIdx = 0; cIdx < 4; ++cIdx) + outputFile.writeWord(0); + } else { + for (uint cIdx = 0; cIdx < 4; ++cIdx, ++comboTable) + outputFile.writeWord((uint16)*comboTable); + } + } + + // Write out game specific strings and other data + if (gameId == 1) { + // Write out miscellaneous strings + outputFile.writeString(Amazon::NO_HELP_MESSAGE_ENG); + outputFile.writeString(Amazon::NO_HINTS_MESSAGE_ENG); + outputFile.writeString(Amazon::RIVER_HIT1_ENG); + outputFile.writeString(Amazon::RIVER_HIT2_ENG); + outputFile.writeString(Amazon::BAR_MESSAGE_ENG); + + for (int idx = 0; idx < 3; ++idx) + outputFile.writeString(Amazon::HELPLVLTXT_ENG[idx]); + for (int idx = 0; idx < 9; ++idx) + outputFile.writeString(Amazon::IQLABELS_ENG[idx]); + + outputFile.writeString(Amazon::CANT_GET_THERE_ENG); + } + + // Do final padding to the next paragraph boundary + if ((outputFile.size() % 16) != 0) + outputFile.writeByte(0, 16 - (outputFile.size() % 16)); + + // Close the executable and signal that it was processed successfully + exeFile.close(); + return true; +} diff --git a/devtools/create_access/create_access_dat.h b/devtools/create_access/create_access_dat.h new file mode 100644 index 0000000000..8b2af6b48b --- /dev/null +++ b/devtools/create_access/create_access_dat.h @@ -0,0 +1,186 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef __CREATE_ACCESS_DAT_H__ +#define __CREATE_ACCESS_DAT_H__ + +#include +#include +#include "common/scummsys.h" +#include "common/endian.h" +#include "common/array.h" + +#define VERSION_NUMBER 1 + +enum AccessMode { + kFileReadMode = 1, + kFileWriteMode = 2 +}; + +class File { +private: + FILE *_f; + const byte *_memPtr; + size_t _offset, _size; +public: + File() : _f(nullptr), _memPtr(nullptr), _offset(0), _size(0) {} + + bool open(const char *filename, AccessMode mode = kFileReadMode) { + _memPtr = nullptr; + _f = fopen(filename, (mode == kFileReadMode) ? "rb" : "wb+"); + return (_f != NULL); + } + bool open(const byte *data, uint size) { + close(); + _memPtr = data; + _size = size; + return true; + } + + void close() { + if (_f) + fclose(_f); + _f = nullptr; + _memPtr = nullptr; + } + int seek(int32 offset, int whence = SEEK_SET) { + if (_f) + return fseek(_f, offset, whence); + + switch (whence) { + case SEEK_SET: + _offset = offset; + break; + case SEEK_CUR: + _offset += offset; + break; + case SEEK_END: + _offset = _size + offset; + break; + default: + break; + } + + return _offset; + } + void skip(int32 offset) { + if (_f) + fseek(_f, offset, SEEK_CUR); + else + _offset += offset; + } + long read(void *buffer, size_t len) { + if (_f) + return fread(buffer, 1, len, _f); + + uint bytesToRead = CLIP(len, (size_t)0, _size - _offset); + memcpy(buffer, &_memPtr[_offset], bytesToRead); + _offset += bytesToRead; + return bytesToRead; + } + void write(const void *buffer, size_t len) { + assert(_f); + fwrite(buffer, 1, len, _f); + } + void write(File &src, size_t len) { + for (size_t idx = 0; idx < len; ++idx) + writeByte(src.readByte()); + } + byte readByte() { + byte v; + read(&v, sizeof(byte)); + return v; + } + uint16 readWord() { + uint16 v; + read(&v, sizeof(uint16)); + return FROM_LE_16(v); + } + uint32 readLong() { + uint32 v; + read(&v, sizeof(uint32)); + return FROM_LE_32(v); + } + void writeByte(byte v) { + write(&v, sizeof(byte)); + } + void writeByte(byte v, int len) { + byte *b = new byte[len]; + memset(b, v, len); + write(b, len); + delete[] b; + } + void writeWord(uint16 v) { + uint16 vTemp = TO_LE_16(v); + write(&vTemp, sizeof(uint16)); + } + void writeLong(uint32 v) { + uint32 vTemp = TO_LE_32(v); + write(&vTemp, sizeof(uint32)); + } + void writeString(const char *msg) { + if (!msg) { + writeByte(0); + } else { + do { + writeByte(*msg); + } while (*msg++); + } + } + void writeString(File &src) { + char c; + do { + c = src.readByte(); + writeByte(c); + } while (c); + } + uint32 pos() const { + if (_f) + return ftell(_f); + else + return _offset; + } + uint32 size() const { + if (_f) { + uint32 currentPos = pos(); + fseek(_f, 0, SEEK_END); + uint32 result = pos(); + fseek(_f, currentPos, SEEK_SET); + return result; + } + else if (_memPtr) { + return _size; + } + else { + return 0; + } + } + bool eof() const { + if (_f) + return feof(_f) != 0; + else if (_memPtr) + return _offset >= _size; + return false; + } +}; + +#endif diff --git a/devtools/create_access/martian_resources.cpp b/devtools/create_access/martian_resources.cpp new file mode 100644 index 0000000000..2a726a78ea --- /dev/null +++ b/devtools/create_access/martian_resources.cpp @@ -0,0 +1,182 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "martian_resources.h" + +namespace Martian { + + +const byte MOUSE0[] = { + // hotspot x and y, uint16 LE + 0, 0, 0, 0, + // byte 1: number of skipped pixels + // byte 2: number of plotted pixels + // then, pixels + 0, 2, 0xF7, 5, + 0, 3, 0xF7, 0xF7, 5, + 0, 3, 0xF7, 0xF7, 5, + 0, 4, 0xF7, 0xF7, 0xF7, 5, + 0, 4, 0xF7, 0xF7, 0xF7, 5, + 0, 5, 0xF7, 0xF7, 0xF7, 0xF7, 5, + 0, 5, 0xF7, 0xF7, 0xF7, 0xF7, 5, + 0, 6, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 5, + 0, 6, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 5, + 0, 7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 5, + 0, 6, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 5, + 0, 5, 0xF7, 0xF7, 0xF7, 0xF7, 5, + 2, 3, 0xF7, 0xF7, 5, + 3, 3, 0xF7, 0xF7, 5, + 3, 3, 0xF7, 0xF7, 5, + 4, 2, 0xF7, 5 +}; +const byte MOUSE1[] = { + // hotspot x and y, uint16 LE + 7, 0, 7, 0, + // byte 1: number of skipped pixels + // byte 2: number of plotted pixels + // then, pixels + 6, 1, 0xF7, + 4, 5, 0xFF, 0xFF, 0, 0xFF, 0xFF, + 3, 7, 0xFF, 0, 0, 0, 0, 0, 0xFF, + 2, 9, 0xFF, 0, 0, 0, 0xF7, 0, 0, 0, 0xFF, + 1, 11, 0xFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, + 1, 11, 0xFF, 0, 0, 0, 0, 0xF7, 0, 0, 0, 0, 0xFF, + 0, 13, 0xF7, 0, 0, 0xF7, 0, 0xF7, 0, 0xF7, 0, 0xF7, 0, 0, 0xF7, + 1, 11, 0xFF, 0, 0, 0, 0, 0xF7, 0, 0, 0, 0, 0xFF, + 1, 11, 0xFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, + 2, 9, 0xFF, 0, 0, 0, 0xF7, 0, 0, 0, 0xFF, + 3, 7, 0xFF, 0, 0, 0, 0, 0, 0xFF, + 4, 5, 0xFF, 0xFF, 0, 0xFF, 0xFF, + 6, 1, 0xF7, + 0, 0, + 0, 0, + 0, 0 +}; +const byte MOUSE2[] = { + // hotspot x and y, uint16 LE + 8, 0, 8, 0, + // byte 1: number of skipped pixels + // byte 2: number of plotted pixels + // then, pixels + 0, 0, + 0, 0, + 7, 2, 4, 5, + 7, 2, 4, 5, + 7, 2, 4, 5, + 7, 2, 4, 5, + 7, 2, 4, 5, + 2, 12, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 5, + 7, 2, 4, 5, + 7, 2, 4, 5, + 7, 2, 4, 5, + 7, 2, 4, 5, + 7, 2, 4, 5, + 0, 0, + 0, 0, + 0, 0 +}; +const byte MOUSE3[] = { + // hotspot x and y, uint16 LE + 0, 0, 0, 0, + // byte 1: number of skipped pixels + // byte 2: number of plotted pixels + // then, pixels + 0, 11, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 0, 12, 6, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 5, + 0, 12, 6, 7, 7, 7, 7, 7, 7, 7, 7, 6, 5, 5, + 0, 12, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, + 0, 12, 6, 6, 6, 6, 6, 5, 6, 6, 6, 6, 6, 5, + 0, 12, 6, 6, 6, 6, 5, 0, 0, 6, 6, 6, 6, 5, + 0, 12, 6, 6, 6, 6, 6, 0, 6, 6, 6, 6, 6, 5, + 0, 12, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, + 0, 12, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, + 0, 12, 6, 6, 6, 6, 6, 5, 6, 6, 6, 6, 6, 5, + 0, 12, 6, 6, 6, 6, 6, 5, 6, 6, 6, 6, 6, 5, + 0, 12, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, + 1, 11, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 0, 0, + 0, 0, + 0, 0 +}; + +const byte *const CURSORS[MARTIAN_NUM_CURSORS] = { + MOUSE0, MOUSE1, MOUSE2, MOUSE3 +}; +const uint CURSOR_SIZES[MARTIAN_NUM_CURSORS] = { + sizeof(MOUSE0), sizeof(MOUSE1), sizeof(MOUSE2), sizeof(MOUSE3) +}; + +const char *const ROOM_DESCR[48] = { + nullptr, "TBD ROOM_TABLE1", "TBD ROOM_TABLE2", "TBD ROOM_TABLE3", "TBD ROOM_TABLE4", + "TBD ROOM_TABLE5", "TBD ROOM_TABLE6", "TBD ROOM_TABLE7", "TBD ROOM_TABLE8", "TBD ROOM_TABLE9", + nullptr, "TBD ROOM_TABLE11", nullptr, "TBD ROOM_TABLE13", "TBD ROOM_TABLE14", + "TBD ROOM_TABLE15", "TBD ROOM_TABLE16", "TBD ROOM_TABLE17", "TBD ROOM_TABLE18", nullptr, + nullptr, "TBD ROOM_TABLE21", "TBD ROOM_TABLE22", "TBD ROOM_TABLE23", "TBD ROOM_TABLE24", + "TBD ROOM_TABLE25", "TBD ROOM_TABLE26", "TBD ROOM_TABLE27", "TBD ROOM_TABLE28", "TBD ROOM_TABLE29", + "TBD ROOM_TABLE30", "TBD ROOM_TABLE31", "TBD ROOM_TABLE32", "TBD ROOM_TABLE33", nullptr, + "TBD ROOM_TABLE35", nullptr, "TBD ROOM_TABLE37", "TBD ROOM_TABLE38", "TBD ROOM_TABLE39", + nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, "TBD ROOM_TABLE47" +}; + +const byte DEATH_SCREENS_ENG[20] = { + 5, 5, 3, 3, 7, 4, 6, 2, 2, 2, 1, 5, 3, 5, 2, 8, 5, 3, 8, 5 +}; + +const char *const DEATH_TEXT_ENG[20] = { + "A VICIOUS THUG PULLS OUT HIS GUN AND AIR CONDITIONS YOUR BRAIN.", + "BIG DICK COMES BACK AND ANNOUNCES YOUR TIME IS UP. ONE OF HIS BOYS PROCEEDS TO PART YOUR EYEBROWS.", + "ALTHOUGH HIS FIRST SHOT MISSED, THE PUNK FINDS YOU AND TURNS YOU INTO A DOUGHNUT.", + "THE CREEP SPOTS YOU. HE TURNS AND FIRES HIS WEAPON. IT BURNS A HOLE A BUZZARD CAN FLY THROUGH.", + "OBVIOUSLY RICK LOGAN HAS A FEW TRICK UP HIS SLEEVE. A TREMENDOUS WEIGHT HITS YOUR HEAD. YOU MUMBLE; WATCH OUT FOR THAT TREE...", + "SLOWLY SINKING IN THE SLIMY OOZE, YOU THINK OF SEVERAL JELLO WRESTLING MATCHES YOU'VE ATTENDED. BUT NO MORE...", + "THE PATH SUDDENLY GIVES WAY AND YOU FEEL MANY STAKES TEAR THROUGH YOUR FLESH. HOW DO YOU LIKE YOUR STAKE", + "THE SNAKE SINKS ITS FANGS INTO YOU LEG. THE POISON WORKS QUICKLY. THE SNAKE THEN SWALLOWS YOU WHOLE.", + "YOU FADE AWAY, GLOWING LIKE A LIGHTBULB.", + "YOU TOUCH THE BUBBLING RADIOACTIVE SELTZER. IT IMMEDIATELY CAUSES VITAL ORGANS TO ELONGATE AND EXPLODE. YOU DIE WITH AN ABSURD AND FOOLISH LOOK ON YOUR FACE.", + "THE DOGS PRETTY HUNGRY. IT WON'T TAKE HIM LONG TO FINISH SO SIT BACK AND ENJOY IT.", + "ROCKY DOESN'T LIKE BEING FOLLOWED. HE DECIDES TO BEAT YOU. WITHIN AND INCH OF YOUR LIFE. UNFORTUNATELY, HE MISJUDGED THE DISTANCE", + "YOU STUMBLE INTO DEADLY LASER FIRE.", + "THE OUTPOST AND YOUR BODY PARTS ARE BLOWN TO KINGDOM COME.", + "YOU REACH THE TOP, BUT YOUR AIR SOON RUNS OUT LEAVING YOU BREATHLESS.", + "YOU DIE IN THE FIERY EXPLOSION.", + "YOU FALL HUNDREDS OF FEET TO YOUR DEATH.", + "YOU WALK ONTO A PRESSURE SENSITIVE SECURITY PAD. A LASER ZEROS IN AND BLOWS A HOLE THE SIZE OF A SUBARU TIRE THROUGH YOU.", + "DANGERFIELD'S EXPERIMENT BACKFIRES. IT RELEASES A DEMON FROM HIS SUBCONSCIOUS WHICH DESTROYS THE ENTIRE PLANET.", + "ONCE DANGERFIELD GETS OUT OF HIS CHAMBER, HE PULLS OUT A WEAPON AND LETS YOU HAVE IT." +}; + +const char *const INVENTORY_NAMES_ENG[55] = { + "CAMERA", "LENS", "PHOTOS", "MAIL", "GUN", + "CASH", "COMLINK", "AMMO", "LOCKPICK KIT", "EARRING", + "RECIEPTS", "PAPER", "LADDER", "BOOTS", "DOCUMENTS", + "KNIFE", "DAGGER", "KEYS", "ROCK", "LOG", + "SHOVEL", "STONE", "REMOTE CONTROL", "FOOD AND WATER", "DOOR CARD KEY", + "FLASHLIGHT", "INTERLOCK KEY", "TOOLS", "REBREATHER", "JET PACK", + "ROD", "HCL2", "SAFE CARD KEY", "TUNING FORK", "STONE", + "ROSE", "KEY", "NOTE", "ALLEN WRENCH", "HOVER BOARD", + "BLUE PRINTS", "LETTER", "MEMORANDUM", "MARKERS", "FILM", + "ANDRETTI FILM", "GLASSES", "AMULET", "FACIAL KIT", "CAT FOOD", + "MONKEY WRENCH", "BIG DICK CARD", "BRA", "BOLT", nullptr +}; + +}; diff --git a/devtools/create_access/martian_resources.h b/devtools/create_access/martian_resources.h new file mode 100644 index 0000000000..c3dfc2a7c2 --- /dev/null +++ b/devtools/create_access/martian_resources.h @@ -0,0 +1,52 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef __MARTIAN_RESOURCES_H__ +#define __MARTIAN_RESOURCES_H__ + +#include "common/scummsys.h" + +namespace Martian { + +#define MARTIAN_NUM_CURSORS 4 +extern const byte *const CURSORS[MARTIAN_NUM_CURSORS]; +extern const uint CURSOR_SIZES[MARTIAN_NUM_CURSORS]; + +extern const char *const ROOM_DESCR[48]; + +extern const char *const DEATH_TEXT_ENG[20]; +extern const byte DEATH_SCREENS_ENG[20]; +extern const char *const INVENTORY_NAMES_ENG[55]; +extern const int COMBO_TABLE[85][4]; + +extern const char *const NO_HELP_MESSAGE_ENG; +extern const char *const NO_HINTS_MESSAGE_ENG; +extern const char *const RIVER_HIT1_ENG; +extern const char *const RIVER_HIT2_ENG; +extern const char *const BAR_MESSAGE_ENG; +extern const char *const HELPLVLTXT_ENG[3]; +extern const char *const IQLABELS_ENG[9]; +extern const char *const CANT_GET_THERE_ENG; + +}; + +#endif diff --git a/devtools/create_access/module.mk b/devtools/create_access/module.mk new file mode 100644 index 0000000000..4694ccc7ef --- /dev/null +++ b/devtools/create_access/module.mk @@ -0,0 +1,13 @@ + +MODULE := devtools/create_access + +MODULE_OBJS := \ + create_access_dat.o \ + amazon_resources.o \ + martian_resources.o + +# Set the name of the executable +TOOL_EXECUTABLE := create_access + +# Include common rules +include $(srcdir)/rules.mk diff --git a/dists/engine-data/access.dat b/dists/engine-data/access.dat new file mode 100644 index 0000000000..e90903816f Binary files /dev/null and b/dists/engine-data/access.dat differ diff --git a/engines/access/access.cpp b/engines/access/access.cpp index 56fa6c7533..bc9bcb4b08 100644 --- a/engines/access/access.cpp +++ b/engines/access/access.cpp @@ -34,19 +34,24 @@ namespace Access { AccessEngine::AccessEngine(OSystem *syst, const AccessGameDescription *gameDesc) : _gameDescription(gameDesc), Engine(syst), _randomSource("Access"), _useItem(_flags[99]), _startup(_flags[170]), _manScaleOff(_flags[172]) { + _aboutBox = nullptr; _animation = nullptr; _bubbleBox = nullptr; _char = nullptr; _debugger = nullptr; _events = nullptr; _files = nullptr; + _invBox = nullptr; _inventory = nullptr; + _helpBox = nullptr; _midi = nullptr; _player = nullptr; + _res = nullptr; _room = nullptr; _screen = nullptr; _scripts = nullptr; _sound = nullptr; + _travelBox = nullptr; _video = nullptr; _destIn = nullptr; @@ -130,6 +135,7 @@ AccessEngine::~AccessEngine() { delete _inventory; delete _midi; delete _player; + delete _res; delete _room; delete _screen; delete _scripts; @@ -204,6 +210,13 @@ void AccessEngine::initialize() { } Common::Error AccessEngine::run() { + _res = Resources::init(this); + Common::String errorMessage; + if (!_res->load(errorMessage)) { + GUIErrorMessage(errorMessage); + return Common::kNoError; + } + setVGA(); initialize(); diff --git a/engines/access/access.h b/engines/access/access.h index 83e313083b..2ca4a3468e 100644 --- a/engines/access/access.h +++ b/engines/access/access.h @@ -42,6 +42,7 @@ #include "access/font.h" #include "access/inventory.h" #include "access/player.h" +#include "access/resources.h" #include "access/room.h" #include "access/screen.h" #include "access/scripts.h" @@ -147,6 +148,7 @@ public: FileManager *_files; InventoryManager *_inventory; Player *_player; + Resources *_res; Room *_room; Screen *_screen; Scripts *_scripts; diff --git a/engines/access/amazon/amazon_game.cpp b/engines/access/amazon/amazon_game.cpp index 7a55873d97..cf90beae96 100644 --- a/engines/access/amazon/amazon_game.cpp +++ b/engines/access/amazon/amazon_game.cpp @@ -146,27 +146,24 @@ void AmazonEngine::playGame() { } void AmazonEngine::setupGame() { + Amazon::AmazonResources &res = *((Amazon::AmazonResources *)_res); + // Load death list - if (isDemo()) { - _deaths.resize(34); - for (int i = 0; i < 34; ++i) { - _deaths[i]._screenId = DEATH_SCREENS_DEMO[i]; - _deaths[i]._msg = DEATH_TEXT_DEMO[i]; - } - } else { - _deaths.resize(58); - for (int i = 0; i < 58; ++i) { - _deaths[i]._screenId = DEATH_SCREENS[i]; - _deaths[i]._msg = DEATH_TEXT[i]; - } + _deaths.resize(_res->DEATHS.size()); + + for (uint idx = 0; idx < _deaths.size(); ++idx) { + _deaths[idx]._screenId = res.DEATHS[idx]._screenId; + _deaths[idx]._msg = res.DEATHS[idx]._msg; } + + // Load the deaths cells _deaths._cells.resize(13); for (int i = 0; i < 13; ++i) _deaths._cells[i] = CellIdent(DEATH_CELLS[i][0], DEATH_CELLS[i][1], DEATH_CELLS[i][2]); // Miscellaneous - _fonts._font1.load(FONT6x6_INDEX, FONT6x6_DATA); - _fonts._font2.load(FONT2_INDEX, FONT2_DATA); + _fonts._font1.load(&res.FONT6x6_INDEX[0], &res.FONT6x6_DATA[0]); + _fonts._font2.load(&res.FONT2_INDEX[0], &res.FONT2_DATA[0]); initVariables(); } @@ -195,8 +192,8 @@ void AmazonEngine::initVariables() { _timers.push_back(te); } - _player->_playerX = _player->_rawPlayer.x = _travelPos[_player->_roomNumber][0]; - _player->_playerY = _player->_rawPlayer.y = _travelPos[_player->_roomNumber][1]; + _player->_playerX = _player->_rawPlayer.x = _res->ROOMTBL[_player->_roomNumber]._travelPos.x; + _player->_playerY = _player->_rawPlayer.y = _res->ROOMTBL[_player->_roomNumber]._travelPos.y; _room->_selectCommand = -1; _events->setNormalCursor(CURSOR_CROSSHAIRS); _mouseMode = 0; @@ -411,6 +408,7 @@ void AmazonEngine::calcIQ() { } void AmazonEngine::helpTitle() { + AmazonResources &res = *(AmazonResources *)_res; int width = _fonts._font2.stringWidth(_bubbleBox->_bubbleTitle); int posX = 160 - (width / 2); _fonts._font2._fontColors[0] = 0; @@ -419,13 +417,13 @@ void AmazonEngine::helpTitle() { _fonts._font2._fontColors[3] = 35; _fonts._font2.drawString(_screen, _bubbleBox->_bubbleTitle, Common::Point(posX, 24)); - width = _fonts._font2.stringWidth(HELPLVLTXT[_helpLevel]); + width = _fonts._font2.stringWidth(res.HELPLVLTXT[_helpLevel]); posX = 160 - (width / 2); _fonts._font2._fontColors[0] = 0; _fonts._font2._fontColors[1] = 10; _fonts._font2._fontColors[2] = 11; _fonts._font2._fontColors[3] = 12; - _fonts._font2.drawString(_screen, HELPLVLTXT[_helpLevel], Common::Point(posX, 36)); + _fonts._font2.drawString(_screen, res.HELPLVLTXT[_helpLevel], Common::Point(posX, 36)); Common::String iqText = "IQ: "; calcIQ(); @@ -441,7 +439,7 @@ void AmazonEngine::helpTitle() { index /= 20; iqText += " "; - iqText += IQLABELS[index]; + iqText += res.IQLABELS[index]; width = _fonts._font2.stringWidth(iqText); posX = 160 - (width / 2); diff --git a/engines/access/amazon/amazon_logic.cpp b/engines/access/amazon/amazon_logic.cpp index de53da51cd..f927525ad1 100644 --- a/engines/access/amazon/amazon_logic.cpp +++ b/engines/access/amazon/amazon_logic.cpp @@ -1598,7 +1598,7 @@ void River::moveCanoe() { if (events._leftButton && pt.y >= 140) { if (pt.x < _vm->_room->_rMouse[8][0]) { // Disk icon wasn't clicked - _vm->_scripts->printString(BAR_MESSAGE); + _vm->_scripts->printString(AMRES.BAR_MESSAGE); } else { // Clicked on the Disc icon. Show the ScummVM menu _vm->_room->handleCommand(9); diff --git a/engines/access/amazon/amazon_resources.cpp b/engines/access/amazon/amazon_resources.cpp index 3d18a16502..2be1c0f8ba 100644 --- a/engines/access/amazon/amazon_resources.cpp +++ b/engines/access/amazon/amazon_resources.cpp @@ -27,50 +27,63 @@ namespace Access { namespace Amazon { -const char *const FILENAMES[] = { - "S00.AP", "S01.AP", "S02.AP", "R03.AP", "S04.AP", "S05.AP", - "S06.AP", "S07.AP", "S08.AP", "S09.AP", "S10.AP", "S11.AP", - "S12.AP", "S13.AP", "S14.AP", "S15.AP", "S16.AP", "S17.AP", - "S18.AP", "S19.AP", "S20.AP", "S21.AP", "S22.AP", "S23.AP", - "S24.AP", "S25.AP", "S26.AP", "S27.AP", "S28.AP", "S29.AP", - "S30.AP", "S31.AP", "S32.AP", "S33.AP", "S34.AP", "R35.AP", - "S36.AP", "S37.AP", "S38.AP", "S39.AP", "S40.AP", "C26.AP", - "S42.AP", "S01.AP", "S44.AP", "S45.AP", "S46.AP", "S47.AP", - "C36.AP", nullptr, "S50.AP", nullptr, nullptr, "S53.AP", - "S54.AP", "S55.AP", "C35.AP", "S57.AP", "S58.AP", nullptr, - nullptr, "S61.AP", nullptr, nullptr, "S64.AP", "C00.AP", - "C01.AP", "C06.AP", "C07.AP", "C08.AP", "C05.AP", "C09.AP", - "C12.AP", "C03.AP", "C13.AP", "C15.AP", "C14.AP", "C16.AP", - "C17.AP", "C19.AP", "C20.AP", "C21.AP", "C22.AP", "C23.AP", - "C24.AP", "C25.AP", "C29.AP", "C30.AP", "C32.AP", "C33.AP", - "C34.AP", "CREDITS.AP", "MIDIDRV.AP", "SUMMARY.AP", "DEAD.AP", - "EST.AP", "CHAPTER.AP", "MIDI.AP", "SOUND.AP", "INV.AP", - // The following files are only present in the CD version - "NARATE01.AP", "NARATE02.AP", "NARATE03.AP", "NARATE04.AP", - "NARATE05.AP", "NARATE06.AP", "NARATE07.AP", "NARATE08.AP", - "NARATE09.AP", "NARATE10.AP", "NARATE11.AP", "NARATE12.AP", - "NARATE13.AP", "NARATE14.AP", "S00.AP", "TAG.AP" -}; - -const char *const FILENAMES_DEMO[] = { - "S00.AP", "S01.AP", "S02.AP", "R03.AP", "S04.AP", "S05.AP", - "S06.AP", "S07.AP", "S08.AP", "S09.AP", "S10.AP", "S11.AP", - "S12.AP", "S13.AP", "S14.AP", "S15.AP", "S16.AP", "S17.AP", - "S18.AP", "S19.AP", "S20.AP", "S21.AP", "S22.AP", "S23.AP", - "S24.AP", "S25.AP", "S26.AP", "S27.AP", "S28.AP", "S29.AP", - "S30.AP", "S31.AP", "S32.AP", "S33.AP", "S34.AP", "R35.AP", - "S36.AP", "S37.AP", "S38.AP", "S39.AP", "S40.AP", "TITLE.AP", - "S42.AP", "S01.AP", "S44.AP", "S45.AP", "S46.AP", "S47.AP", - nullptr, nullptr, "S50.AP", nullptr, nullptr, "S53.AP", - "S54.AP", nullptr, nullptr, "S57.AP", nullptr, nullptr, - nullptr, "S61.AP", nullptr, "C23.AP", "C12.AP", "C00.AP", - "C01.AP", "C06.AP", "C07.AP", "C08.AP", "C05.AP", "C09.AP", - "C12.AP", "C03.AP", "C13.AP", "C15.AP", "C14.AP", "C16.AP", - "C17.AP", "C19.AP", "C20.AP", "C21.AP", "C22.AP", "C23.AP", - "C24.AP", "C25.AP", "R49.AP", "R49.AP", "R49.AP", "R49.AP", - "R49.AP", "R49.AP", "R49.AP", "R49.AP", "DEAD.AP", "EST.AP", - "CHAPTER.AP", "MUSIC.AP", "SOUND.AP", "INV.AP" -}; +AmazonResources::AmazonResources(AccessEngine *vm): Resources(vm) { +} + +void AmazonResources::load(Common::SeekableReadStream &s) { + Resources::load(s); + uint count; + + // Load the version specific data + NO_HELP_MESSAGE = readString(s); + NO_HINTS_MESSAGE = readString(s); + RIVER_HIT1 = readString(s); + RIVER_HIT2 = readString(s); + BAR_MESSAGE = readString(s); + + for (int idx = 0; idx < 3; ++idx) + HELPLVLTXT[idx] = readString(s); + for (int idx = 0; idx < 9; ++idx) + IQLABELS[idx] = readString(s); + + CANT_GET_THERE = readString(s); + + // Get the offset of the general shared data for the game + uint entryOffset = findEntry(_vm->getGameID(), 2, 0, (Common::Language)0); + s.seek(entryOffset); + + // Read in the cursor list + count = s.readUint16LE(); + CURSORS.resize(count); + for (uint idx = 0; idx < count; ++idx) { + uint count2 = s.readUint16LE(); + CURSORS[idx].resize(count2); + s.read(&CURSORS[idx][0], count2); + } + + // Load font data + count = s.readUint16LE(); + FONT2_INDEX.resize(count); + for (uint idx = 0; idx < count; ++idx) + FONT2_INDEX[idx] = s.readSint16LE(); + + count = s.readUint16LE(); + FONT2_DATA.resize(count); + for (uint idx = 0; idx < count; ++idx) + FONT2_DATA[idx] = s.readByte(); + + count = s.readUint16LE(); + FONT6x6_INDEX.resize(count); + for (uint idx = 0; idx < count; ++idx) + FONT6x6_INDEX[idx] = s.readSint16LE(); + + count = s.readUint16LE(); + FONT6x6_DATA.resize(count); + for (uint idx = 0; idx < count; ++idx) + FONT6x6_DATA[idx] = s.readByte(); +} + +/*------------------------------------------------------------------------*/ const int SIDEOFFR[] = { 5, 5, 5, 5, 5, 5, 5, 5, 0 }; const int SIDEOFFL[] = { 5, 5, 5, 5, 5, 5, 5, 5, 0 }; @@ -85,316 +98,6 @@ const int DIAGOFFULY[] = { 3, 3, 1, 2, 2, 1, 1, 1, 0 }; const int DIAGOFFDLX[] = { 4, 5, 3, 3, 5, 4, 6, 1, 0 }; const int DIAGOFFDLY[] = { 2, 2, 1, 2, 3, 1, 2, 1, 0 }; -const byte MOUSE0[] = { - // hotspot x and y, uint16 LE - 0, 0, 0, 0, - // byte 1: number of skipped pixels - // byte 2: number of plotted pixels - // then, pixels - 0, 2, 6, 1, - 0, 3, 6, 6, 1, - 0, 3, 6, 6, 1, - 0, 4, 6, 6, 6, 1, - 0, 4, 6, 6, 6, 1, - 0, 5, 6, 6, 6, 6, 1, - 0, 5, 6, 6, 6, 6, 1, - 0, 6, 6, 6, 6, 6, 6, 1, - 0, 6, 6, 6, 6, 6, 6, 1, - 0, 7, 6, 6, 6, 6, 6, 6, 1, - 0, 6, 6, 6, 6, 6, 6, 1, - 0, 5, 6, 6, 6, 6, 1, - 2, 3, 6, 6, 1, - 3, 3, 6, 6, 1, - 3, 3, 6, 6, 1, - 4, 2, 6, 1 -}; - -const byte MOUSE1[] = { - // hotspot x and y, uint16 LE - 0x07, 0x00, 0x07, 0x00, - // byte 1: number of skipped pixels - // byte 2: number of plotted pixels - // then, pixels - 0x06, 0x01, 0x05, - 0x04, 0x05, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, - 0x03, 0x07, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, - 0x02, 0x09, 0xFF, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0xFF, - 0x01, 0x0B, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, - 0x01, 0x0B, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0xFF, - 0x00, 0x0D, 0x05, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x00, 0x05, - 0x01, 0x0B, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0xFF, - 0x01, 0x0B, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, - 0x02, 0x09, 0xFF, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0xFF, - 0x03, 0x07, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, - 0x04, 0x05, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, - 0x06, 0x01, 0x05, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00 -}; - -const byte MOUSE2[] = { - // hotspot x and y, uint16 LE - 0x08, 0x00, 0x08, 0x00, - // byte 1: number of skipped pixels - // byte 2: number of plotted pixels - // then, pixels - 0x00, 0x00, - 0x00, 0x00, - 0x07, 0x02, 0x04, 0x05, - 0x07, 0x02, 0x04, 0x05, - 0x07, 0x02, 0x04, 0x05, - 0x07, 0x02, 0x04, 0x05, - 0x07, 0x02, 0x04, 0x05, - 0x02, 0x0C, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x05, - 0x07, 0x02, 0x04, 0x05, - 0x07, 0x02, 0x04, 0x05, - 0x07, 0x02, 0x04, 0x05, - 0x07, 0x02, 0x04, 0x05, - 0x07, 0x02, 0x04, 0x05, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00 -}; - -const byte MOUSE3[] = { - // hotspot x and y, uint16 LE - 0x00, 0x00, 0x00, 0x00, - // byte 1: number of skipped pixels - // byte 2: number of plotted pixels - // then, pixels - 0x00, 0x0B, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x00, 0x0C, 0x06, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x06, 0x06, 0x05, - 0x00, 0x0C, 0x06, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x06, 0x05, 0x05, - 0x00, 0x0C, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, - 0x00, 0x0C, 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, - 0x00, 0x0C, 0x06, 0x06, 0x06, 0x06, 0x05, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x05, - 0x00, 0x0C, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, - 0x00, 0x0C, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, - 0x00, 0x0C, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, - 0x00, 0x0C, 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, - 0x00, 0x0C, 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, - 0x00, 0x0C, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, - 0x01, 0x0B, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00 -}; -const byte CURSEYE[] = { - // hotspot x and y, uint16 LE - 0x01, 0x00, 0x08, 0x00, - // byte 1: number of skipped pixels - // byte 2: number of plotted pixels - // then, pixels - 0x04, 0x06, 0x0E, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, - 0x03, 0x09, 0x0E, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0D, 0x0D, - 0x02, 0x0B, 0x0E, 0x01, 0x33, 0x33, 0x01, 0x01, 0x33, 0x34, 0x01, 0x01, 0x0D, - 0x01, 0x0D, 0x0E, 0x01, 0x04, 0x34, 0x01, 0x01, 0x01, 0x07, 0x33, 0x04, 0x04, 0x01, 0x0D, - 0x00, 0x0F, 0x0E, 0x0E, 0x01, 0x07, 0x33, 0x33, 0x01, 0x01, 0x33, 0x34, 0x07, 0x07, 0x06, 0x01, 0x0E, - 0x01, 0x0D, 0x0F, 0x0F, 0x06, 0x07, 0x34, 0x33, 0x33, 0x34, 0x07, 0x07, 0x06, 0x0F, 0x0E, - 0x03, 0x09, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0E, - 0x01, 0x01, 0x07, - 0x00, 0x03, 0x07, 0x01, 0x07, - 0x01, 0x01, 0x07, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00 -}; - -const byte CURSHAND[] = { - // hotspot x and y, uint16 LE - 0x02, 0x00, 0x03, 0x00, - // byte 1: number of skipped pixels - // byte 2: number of plotted pixels - // then, pixels - 0x07, 0x02, 0x17, 0x0E, - 0x05, 0x07, 0x0E, 0x12, 0x17, 0x0E, 0x13, 0x17, 0x0E, - 0x02, 0x0C, 0x07, 0x00, 0x17, 0x0E, 0x11, 0x0F, 0x0E, 0x11, 0x17, 0x0E, 0x00, 0x17, - 0x01, 0x0E, 0x07, 0x01, 0x07, 0x0F, 0x0E, 0x11, 0x17, 0x0E, 0x11, 0x0F, 0x0E, 0x12, 0x17, 0x0E, - 0x02, 0x0D, 0x07, 0x00, 0x17, 0x0F, 0x12, 0x0F, 0x0F, 0x11, 0x17, 0x0E, 0x12, 0x0F, 0x0E, - 0x04, 0x0B, 0x0F, 0x0E, 0x11, 0x17, 0x0E, 0x12, 0x0F, 0x0F, 0x11, 0x17, 0x0E, - 0x04, 0x0B, 0x17, 0x0E, 0x12, 0x17, 0x0E, 0x12, 0x17, 0x0E, 0x11, 0x0F, 0x0E, - 0x00, 0x0F, 0x0E, 0x0D, 0x12, 0x00, 0x17, 0x0F, 0x0F, 0x0F, 0x0F, 0x12, 0x0F, 0x0E, 0x12, 0x17, 0x0F, - 0x00, 0x0F, 0x0F, 0x17, 0x0D, 0x11, 0x0F, 0x0E, 0x0D, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0E, 0x0D, - 0x01, 0x0E, 0x0F, 0x17, 0x0F, 0x0E, 0x0F, 0x0D, 0x0D, 0x0D, 0x0D, 0x0E, 0x0F, 0x0F, 0x0E, 0x0D, - 0x02, 0x0D, 0x0F, 0x17, 0x0F, 0x0E, 0x0D, 0x0D, 0x0F, 0x0F, 0x0E, 0x0F, 0x0E, 0x0E, 0x12, - 0x03, 0x0C, 0x0F, 0x17, 0x0F, 0x0F, 0x0F, 0x0E, 0x0F, 0x0F, 0x0F, 0x0E, 0x0D, 0x12, - 0x04, 0x0A, 0x0F, 0x17, 0x0F, 0x0F, 0x0F, 0x0E, 0x0F, 0x0F, 0x0E, 0x0D, - 0x05, 0x09, 0x0F, 0x17, 0x0F, 0x0F, 0x0F, 0x0F, 0x0E, 0x0D, 0x12, - 0x06, 0x08, 0x17, 0x0F, 0x0F, 0x0F, 0x0F, 0x0E, 0x0D, 0x12, - 0x06, 0x07, 0x17, 0x0F, 0x0F, 0x0F, 0x3D, 0x0E, 0x0D -}; - -const byte CURSGET[] = { - // hotspot x and y, uint16 LE - 0x07, 0x00, 0x0E, 0x00, - // byte 1: number of skipped pixels - // byte 2: number of plotted pixels - // then, pixels - 0x0A, 0x05, 0x1C, 0x07, 0x0F, 0x0F, 0x0F, - 0x08, 0x08, 0x1C, 0x07, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0C, - 0x06, 0x0A, 0x1C, 0x07, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0C, - 0x05, 0x0A, 0x07, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0C, - 0x03, 0x0C, 0x07, 0x1C, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0C, - 0x02, 0x0D, 0x1C, 0x0F, 0x0E, 0x0E, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0C, - 0x01, 0x0E, 0x07, 0x0F, 0x0E, 0x0D, 0x0F, 0x0E, 0x0D, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0C, - 0x00, 0x0F, 0x1C, 0x0F, 0x0E, 0x0D, 0x0F, 0x0E, 0x0D, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0C, - 0x00, 0x0F, 0x1C, 0x0E, 0x0D, 0x0F, 0x0E, 0x0D, 0x0F, 0x0F, 0x0C, 0x0C, 0x0E, 0x0F, 0x0F, 0x0F, 0x0C, - 0x00, 0x0E, 0x1C, 0x0D, 0x0F, 0x0E, 0x0D, 0x0F, 0x0F, 0x0C, 0x00, 0x00, 0x0E, 0x0F, 0x0F, 0x0C, - 0x00, 0x0E, 0x1C, 0x0E, 0x0F, 0x0D, 0x0F, 0x0F, 0x0C, 0x00, 0x00, 0x0E, 0x1C, 0x0F, 0x0F, 0x0C, - 0x00, 0x0D, 0x1C, 0x0D, 0x0F, 0x0D, 0x0F, 0x0C, 0x00, 0x00, 0x00, 0x0E, 0x1C, 0x0F, 0x0C, - 0x01, 0x0B, 0x0E, 0x0F, 0x0E, 0x0F, 0x0C, 0x00, 0x00, 0x0E, 0x07, 0x0F, 0x0C, - 0x02, 0x09, 0x0E, 0x0D, 0x0F, 0x0C, 0x00, 0x07, 0x0E, 0x0F, 0x0C, - 0x03, 0x06, 0x0E, 0x0F, 0x0E, 0x07, 0x01, 0x07, - 0x07, 0x01, 0x07 -}; - -const byte CURSCLIMB[] = { - // hotspot x and y, uint16 LE - 0x03, 0x00, 0x0E, 0x00, - // byte 1: number of skipped pixels - // byte 2: number of plotted pixels - // then, pixels - 0x06, 0x04, 0x01, 0x01, 0x01, 0x01, - 0x06, 0x04, 0x0F, 0x0E, 0x01, 0x01, - 0x06, 0x04, 0x0F, 0x0E, 0x0D, 0x01, - 0x07, 0x02, 0x0F, 0x0D, - 0x00, 0x0C, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x13, 0x12, 0x12, 0x12, 0x12, 0x11, 0x11, - 0x00, 0x0D, 0x0D, 0x0E, 0x00, 0x00, 0x13, 0x14, 0x13, 0x12, 0x12, 0x12, 0x11, 0x11, 0x0E, - 0x01, 0x0C, 0x0D, 0x0D, 0x0D, 0x0E, 0x11, 0x13, 0x13, 0x12, 0x11, 0x11, 0x0E, 0x0D, - 0x02, 0x0C, 0x0E, 0x0E, 0x00, 0x00, 0x00, 0x13, 0x12, 0x11, 0x00, 0x00, 0x0E, 0x0D, - 0x03, 0x0B, 0x04, 0x04, 0x04, 0x22, 0x21, 0x21, 0x20, 0x00, 0x00, 0x00, 0x0D, - 0x02, 0x0D, 0x22, 0x04, 0x20, 0x22, 0x04, 0x21, 0x04, 0x20, 0x00, 0x00, 0x00, 0x0E, 0x0E, - 0x03, 0x07, 0x22, 0x21, 0x20, 0x20, 0x22, 0x04, 0x20, - 0x04, 0x06, 0x01, 0x01, 0x00, 0x04, 0x22, 0x20, - 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, 0x20, - 0x03, 0x09, 0x07, 0x01, 0x01, 0x00, 0x00, 0x00, 0x22, 0x04, 0x20, - 0x02, 0x0B, 0x07, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x20, - 0x03, 0x0A, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01 -}; - -const byte CURSTALK[] = { - // hotspot x and y, uint16 LE - 0x02, 0x00, 0x0B, 0x00, - // byte 1: number of skipped pixels - // byte 2: number of plotted pixels - // then, pixels - 0x03, 0x08, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x01, 0x0C, 0x06, 0x06, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x06, 0x06, - 0x00, 0x0E, 0x06, 0x06, 0x06, 0x06, 0x07, 0x06, 0x07, 0x07, 0x06, 0x07, 0x07, 0x06, 0x07, 0x06, - 0x00, 0x0F, 0x06, 0x08, 0x08, 0x08, 0x06, 0x08, 0x06, 0x06, 0x08, 0x06, 0x06, 0x08, 0x06, 0x08, 0x06, - 0x00, 0x0F, 0x06, 0x06, 0x08, 0x06, 0x08, 0x06, 0x08, 0x06, 0x08, 0x06, 0x06, 0x08, 0x08, 0x06, 0x06, - 0x00, 0x0F, 0x06, 0x06, 0x08, 0x06, 0x08, 0x08, 0x08, 0x06, 0x08, 0x06, 0x06, 0x08, 0x06, 0x08, 0x06, - 0x01, 0x0E, 0x06, 0x08, 0x06, 0x08, 0x06, 0x08, 0x06, 0x08, 0x08, 0x06, 0x08, 0x06, 0x08, 0x06, - 0x02, 0x0C, 0x06, 0x06, 0x06, 0x07, 0x06, 0x07, 0x06, 0x06, 0x07, 0x06, 0x07, 0x06, - 0x04, 0x09, 0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x07, 0x06, 0x06, - 0x07, 0x04, 0x06, 0x07, 0x07, 0x06, - 0x02, 0x08, 0x07, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x01, 0x06, 0x07, 0x01, 0x07, 0x06, 0x06, 0x06, - 0x02, 0x01, 0x07, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00 -}; -const byte CURSHELP[] = { - // hotspot x and y, uint16 LE - 0x02, 0x00, 0x0B, 0x00, - // byte 1: number of skipped pixels - // byte 2: number of plotted pixels - // then, pixels - 0x04, 0x06, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, - 0x02, 0x0A, 0x24, 0x24, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x20, - 0x01, 0x0C, 0x24, 0x22, 0x22, 0x22, 0x20, 0x20, 0x20, 0x22, 0x22, 0x22, 0x22, 0x20, - 0x00, 0x0E, 0x24, 0x22, 0x22, 0x22, 0x20, 0x00, 0x00, 0x00, 0x24, 0x22, 0x22, 0x22, 0x22, 0x20, - 0x00, 0x0E, 0x24, 0x22, 0x22, 0x22, 0x22, 0x20, 0x00, 0x00, 0x00, 0x24, 0x22, 0x22, 0x22, 0x20, - 0x00, 0x0E, 0x24, 0x22, 0x22, 0x22, 0x22, 0x20, 0x00, 0x00, 0x00, 0x24, 0x22, 0x22, 0x22, 0x20, - 0x01, 0x0D, 0x24, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x24, 0x22, 0x22, 0x22, 0x22, 0x20, - 0x07, 0x06, 0x24, 0x22, 0x22, 0x22, 0x22, 0x20, - 0x05, 0x07, 0x24, 0x22, 0x22, 0x22, 0x22, 0x20, 0x20, - 0x04, 0x05, 0x24, 0x22, 0x22, 0x22, 0x20, - 0x02, 0x07, 0x07, 0x00, 0x24, 0x20, 0x20, 0x20, 0x20, - 0x01, 0x03, 0x07, 0x01, 0x07, - 0x02, 0x07, 0x07, 0x00, 0x00, 0x24, 0x24, 0x24, 0x24, - 0x04, 0x06, 0x24, 0x22, 0x22, 0x22, 0x22, 0x20, - 0x04, 0x06, 0x24, 0x22, 0x22, 0x22, 0x22, 0x20, - 0x05, 0x04, 0x20, 0x20, 0x20, 0x20 -}; -const byte *const CURSORS[10] = { - MOUSE0, MOUSE1, MOUSE2, MOUSE3, CURSEYE, CURSHAND, CURSGET, CURSCLIMB, CURSTALK, CURSHELP -}; - -const int _travelPos[][2] = { - { -1, 0 }, - { 228, 117 }, - { 28, 98 }, - { 161, 140 }, - { 130, 139 }, - { 884, 95 }, - { 0, 0 }, - { 0, 0 }, - { 0, 0 }, - { 41, 185 }, - { 60, 138 }, - { 0, 0 }, - { 0, 0 }, - { 0, 0 }, - { 0, 0 }, - { 0, 0 }, - { 170, 155 }, - { 0, 0 }, - { 0, 0 }, - { 0, 0 }, - { 108, 95 }, - { 0, 0 }, - { 0, 0 }, - { 0, 0 }, - { 100, 115 }, - { 480, 90 }, - { 154, 63 }, - { 0, 0 }, - { 145, 85 }, - { 0, 0 }, - { 110, 107 }, - { 0, 0 }, - { 105, 154 }, - { 0, 0 }, - { 0, 0 }, - { 0, 0 }, - { 0, 0 }, - { 20, 160 }, - { 130, 314 }, - { 0, 0 }, - { 50, 125 }, - { 0, 0 }, - { 0, 0 }, - { 123, 123 }, - { -1, 7 }, - { 266, 168 }, - { 0, 0 }, - { 0, 0 }, - { 0, 0 }, - { -1, 18 }, - { -1, 19 }, - { 0, 0 }, - { 0, 0 }, - { 0, 0 }, - { 0, 0 }, - { 0, 0 }, - { 203, 160 }, - { 0, 0 }, - { 283, 163 }, - { 0, 0 }, - { 0, 0 }, - { 0, 0 }, - { 180, 165 }, - { 0, 0 }, - { 0, 0 }, - { 0, 0 } -}; - const int OVEROFFR[] = { 2, 2, 1, 2, 2, 1, 0, 0, 0 }; const int OVEROFFL[] = { 2, 2, 1, 2, 2, 1, 0, 0, 0 }; const int OVEROFFU[] = { 1, 1, 1, 1, 1, 1, 0, 0, 0 }; @@ -408,1528 +111,6 @@ const int OVEROFFULY[] = { 1, 0, 0, 2, 1, 0, 0, 0, 0 }; const int OVEROFFDLX[] = { 1, 2, 1, 1, 2, 1, 0, 0, 0 }; const int OVEROFFDLY[] = { 0, 1, 0, 0, 1, 1, 0, 0, 0 }; -const byte CREDITS[] = { - 0x2, 0xFF, 0xFF, 0x61, 0x0, 0x3, 0x0, 0x30, 0x22, 0x30, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0xFF, 0x0, 0x0, 0xFF, 0xFF, - 0x0, 0x0, 0xFF, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF -}; - -const byte ALLISTER[] = { - 0x0, 0xFF, 0xFF, 0x61, 0x0, 0x0, 0x0, 0x36, 0x0F, 0x5E, 0x4, 0x0, 0x0, - 0x0, 0x4, 0x4, 0x0, 0x3, 0x0, 0xFF, 0x4, 0x0, 0x2, 0x0, 0x4, 0x0, 0x1, 0x0, 0x8C, - 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x0, 0x0, 0x0, - 0x1, 0x0, 0x62, 0x0, 0x0B, 0x0, 0x1, 0x0, 0x62, 0x0, 0x0C, 0x0, 0x1, 0x0, 0x62, - 0x0, 0x0D, 0x0, 0x1, 0x0, 0xFF, 0xFF -}; - -const byte HALL[] = { - 0x0, 0xFF, 0xFF, 0x61, 0x0, 0x0, 0x0, 0x40, 0x3E, 0x1A, 0x5, 0x0, 0x0, - 0x0, 0x5, 0x5, 0x0, 0x3, 0x0, 0xFF, 0x5, 0x0, 0x2, 0x0, 0x5, 0x0, 0x1, 0x0, 0xFF, - 0x30, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x0, 0x0, - 0x0, 0x2, 0x0, 0x62, 0x0, 0x0D, 0x0, 0x1, 0x0, 0x62, 0x0, 0x13, 0x0, 0x1, 0x0, - 0x62, 0x0, 0x14, 0x0, 0x2, 0x0, 0x62, 0x0, 0x4, 0x0, 0x1, 0x0, 0xFF, 0xFF -}; - -const byte JASONLAB[] = { - 0x1, 0x6, 0x0, 0x61, 0x0, 0x0D, 0x0, 0x40, 0x20, 0x0C4, 0x6, 0x0, 0x0, 0x0, - 0x6, 0x6, 0x0, 0x3, 0x0, 0xFF, 0x6, 0x0, 0x2, 0x0, 0x6, 0x0, 0x1, 0x0, 0xFF, 0x0, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x0, 0x0, 0x0, 0x1, - 0x0, 0x62, 0x0, 0x1, 0x0, 0x1, 0x0, 0x62, 0x0, 0x2, 0x0, 0x1, 0x0, 0x62, 0x0, 0x3, - 0x0, 0x2, 0x0, 0x62, 0x0, 0x26, 0x0, 0x1, 0x0, 0x62, 0x0, 0x0D, 0x0, 0x1, 0x0, - 0x62, 0x0, 0x35, 0x0, 0x2, 0x0, 0xFF, 0xFF -}; - -const byte ALLENLAB[] = { - 0x1, 0x8, 0x0, 0x61, 0x0, 0x0D, 0x0, 0x40, 0x20, 0x0C4, 0x8, 0x0, 0x0, 0x0, - 0x8, 0x8, 0x0, 0x3, 0x0, 0xFF, 0x8, 0x0, 0x2, 0x0, 0x8, 0x0, 0x1, 0x0, 0xFF, 0x0, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x0, 0x0, 0x0, 0x1, - 0x0, 0x62, 0x0, 0x7, 0x0, 0x1, 0x0, 0x62, 0x0, 0x8, 0x0, 0x2, 0x0, 0x62, 0x0, 0x9, - 0x0, 0x1, 0x0, 0x62, 0x0, 0x0A, 0x0, 0x1, 0x0, 0x62, 0x0, 0x0D, 0x0, 0x1, 0x0, - 0xFF, 0xFF -}; - -const byte OUTVAULT[] = { - 0x0, 0x9, 0x0, 0x61, 0x0, 0x2B, 0x0, 0x30, 0x18, 0x9B, 0x9, 0x0, 0x0, 0x0, - 0x9, 0x9, 0x0, 0x3, 0x0, 0xFF, 0x9, 0x0, 0x2, 0x0, 0x9, 0x0, 0x1, 0x0, 0x0B4, 0x10, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x0, 0x0, 0x0, 0x3, - 0x0, 0x62, 0x0, 0x4, 0x0, 0x1, 0x0, 0x62, 0x0, 0x5, 0x0, 0x2, 0x0, 0x62, 0x0, 0x6, - 0x0, 0x2, 0x0, 0x62, 0x0, 0x36, 0x0, 0x1, 0x0, 0x62, 0x0, 0x47, 0x0, 0x1, 0x0, - 0xFF, 0xFF -}; - -const byte VAULT[] = { - 0x0, 0xFF, 0xFF, 0x61, 0x0, 0x29, 0x0, 0x40, 0x3A, 0x37, 0x0A, 0x0, - 0x0, 0x0, 0x0A, 0x0A, 0x0, 0x3, 0x0, 0xFF, 0x0A, 0x0, 0x2, 0x0, 0x0A, 0x0, - 0x1, 0x0, 0xFF, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, - 0x0, 0x0, 0x0, 0x1, 0x0, 0x62, 0x0, 0x37, 0x0, 0x2, 0x0, 0x62, 0x0, 0x39, 0x0, - 0x1, 0x0, 0x62, 0x0, 0x38, 0x0, 0x2, 0x0, 0x62, 0x0, 0x15, 0x0, 0x2, 0x0, 0xFF, - 0xFF -}; - -const byte LIBRARY[] = { - 0x1, 0xFF, 0xFF, 0x61, 0x0, 0x0C, 0x0, 0x40, 0x3A, 0x22, 0x0B, 0x0, - 0x0, 0x0, 0x0B, 0x0B, 0x0, 0x3, 0x0, 0xFF, 0x0B, 0x0, 0x2, 0x0, 0x0B, 0x0, - 0x1, 0x0, 0xFF, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, - 0x0, 0x0, 0x0, 0x1, 0x0, 0x62, 0x0, 0x1, 0x0, 0x1, 0x0, 0xFF, 0xFF, -}; - -const byte JASAPT[] = { - 0x1, 0x0C, 0x0, 0x61, 0x0, 0x19, 0x0, 0x40, 0x30, 0x14, 0x0C, 0x0, 0x0, - 0x0, 0x0C, 0x0C, 0x0, 0x3, 0x0, 0xFF, 0x0C, 0x0, 0x2, 0x0, 0x0C, 0x0, 0x1, - 0x0, 0xFF, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, - 0x0, 0x18, 0x0, 0x2, 0x0, 0x62, 0x0, 0x17, 0x0, 0x1, 0x0, 0x62, 0x0, 0x11, - 0x0, 0x1, 0x0, 0x62, 0x0, 0x0D, 0x0, 0x1, 0x0, 0xFF, 0xFF -}; - -const byte RANSACKED[] = { - 0x1, 0x0D, 0x0, 0x61, 0x0, 0x2D, 0x0, 0x40, 0x36, 0x2C, 0x0D, 0x0, 0x0, - 0x0, 0x0D, 0x0D, 0x0, 0x3, 0x0, 0xFF, 0x0D, 0x0, 0x2, 0x0, 0x0D, 0x0, 0x1, - 0x0, 0xFF, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, - 0x0, 0x17, 0x0, 0x1, 0x0, 0xFF, 0xFF -}; - -const byte MEAN1[] = { - 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x40, 0x3E, 0x33, - 0xFF, 0xFF, 0x0, 0x0, 0xFF, 0x0E, 0x0, 0x5, 0x0, 0x0E, 0x0, 0x4, 0x0, - 0xFF, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF -}; - -const byte FLYSOUTH[] = { - 0x1, 0xFF, 0xFF, 0x61, 0x0, 0x10, 0x0, 0x28, 0x0C, 0x5E, 0x0F, 0x0, - 0x0, 0x0, 0x0F, 0x0F, 0x0, 0x2, 0x0, 0xFF, 0x0F, 0x0, 0x1, 0x0, 0xFF, 0xFF, - 0x1, 0x0, 0xFF, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, - 0x0, 0x44, 0x0, 0x1, 0x0, 0xFF, 0xFF -}; - -const byte CUZCO[] = { - 0x2, 0x10, 0x0, 0x61, 0x0, 0x10, 0x0, 0x40, 0x20, 0x30, 0x10, 0x0, 0x0, - 0x0, 0x10, 0x10, 0x0, 0x3, 0x0, 0xFF, 0x10, 0x0, 0x2, 0x0, 0x10, 0x0, 0x1, - 0x0, 0x6E, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, - 0x0, 0x0, 0x0, 0x2, 0x0, 0x62, 0x0, 0x44, 0x0, 0x1, 0x0, 0xFF, 0xFF -}; - -const byte INAIR[] = { - 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x28, 0x19, 0x2B, - 0x11, 0x0, 0x0, 0x0, 0x11, 0x11, 0x0, 0x3, 0x0, 0xFF, 0x11, 0x0, 0x2, 0x0, - 0x11, 0x0, 0x1, 0x0, 0xFF, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF -}; - -const byte GREENMONKEY[] = { - 0x1, 0xFF, 0xFF, 0x61, 0x0, 0x11, 0x0, 0x2D, 0x14, 0x3C, 0x12, 0x0, - 0x0, 0x0, 0x12, 0x12, 0x0, 0x3, 0x0, 0xFF, 0x12, 0x0, 0x2, 0x0, 0x12, 0x0, - 0x1, 0x0, 0xFF, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF -}; - -const byte INPLANE[] = { - 0x2, 0x13, 0x0, 0x61, 0x0, 0x26, 0x0, 0x2D, 0x28, 0x28, 0x13, 0x0, 0x0, - 0x0, 0x13, 0x13, 0x0, 0x3, 0x0, 0xFF, 0x13, 0x0, 0x2, 0x0, 0x13, 0x0, 0x1, - 0x0, 0xFF, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x0, 0x0, 0x0, - 0x2, 0x0, 0x62, 0x0, 0x29, 0x0, 0x2, 0x0, 0x62, 0x0, 0x1F, 0x0, 0x1, 0x0, - 0x62, 0x0, 0x38, 0x0, 0x2, 0x0, 0x62, 0x0, 0x33, 0x0, 0x1, 0x0, 0xFF, 0xFF -}; - -const byte PILFALL[] = { - 0x1, 0xFF, 0xFF, 0x61, 0x0, 0x16, 0x0, 0x28, 0x0C, 0x5E, 0x14, 0x0, - 0x0, 0x0, 0x14, 0x14, 0x0, 0x2, 0x0, 0xFF, 0x14, 0x0, 0x1, 0x0, 0xFF, 0xFF, - 0x1, 0x0, 0xFF, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, - 0x0, 0x3A, 0x0, 0x1, 0x0, 0xFF, 0xFF -}; - -const byte COCKPIT[] = { - 0x1, 0xFF, 0xFF, 0x61, 0x0, 0x12, 0x0, 0x3C, 0x2A, 0x29, 0x15, 0x0, - 0x0, 0x0, 0x15, 0x15, 0x0, 0x3, 0x0, 0xFF, 0x15, 0x0, 0x2, 0x0, 0x15, 0x0, - 0x1, 0x0, 0xFF, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, - 0x0, 0x23, 0x0, 0x1, 0x0, 0xFF, 0xFF -}; - -const byte CRASH[] = { - 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x40, 0x2D, 0x64, - 0x16, 0x0, 0x0, 0x0, 0xFF, 0x16, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0x0, 0x0, - 0xFF, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0x16, 0x0, 0x2, 0x0, 0xFF, - 0xFF, 0x62, 0x0, 0x2A, 0x0, 0x1, 0x0, 0xFF, 0xFF -}; - -const byte SINKING[] = { - 0x2, 0xFF, 0xFF, 0x61, 0x0, 0x14, 0x0, 0x40, 0x3C, 0x19, 0x17, 0x0, - 0x0, 0x0, 0x17, 0x17, 0x0, 0x3, 0x0, 0xFF, 0x17, 0x0, 0x2, 0x0, 0x17, 0x0, - 0x1, 0x0, 0xFF, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, - 0x0, 0x0, 0x0, 0x1, 0x0, 0x62, 0x0, 0x48, 0x0, 0x1, 0x0, 0x62, 0x0, 0x17, 0x0, - 0x1, 0x0, 0xFF, 0xFF -}; - -const byte JNGLWLK[] = { - 0x2, 0xFF, 0xFF, 0x61, 0x0, 0x17, 0x0, 0x40, 0x3F, 0x5A, 0x18, 0x0, - 0x0, 0x0, 0x18, 0x18, 0x0, 0x2, 0x0, 0xFF, 0x18, 0x0, 0x1, 0x0, 0xFF, 0xFF, - 0x0, 0x0, 0x0DC, 0x0A0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x62, 0x0, 0x0, 0x0, 0x1, 0x0, 0xFF, 0xFF -}; - -const byte TOWN[] = { - 0x2, 0x19, 0x0, 0x61, 0x0, 0x18, 0x0, 0x3E, 0x32, 0x80, 0x19, 0x0, 0x0, - 0x0, 0x19, 0x19, 0x0, 0x3, 0x0, 0xFF, 0x19, 0x0, 0x2, 0x0, 0x19, 0x0, 0x1, - 0x0, 0x64, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, - 0x0, 0x0, 0x0, 0x1, 0x0, 0x62, 0x0, 0x3D, 0x0, 0x1, 0x0, 0x62, 0x0, 0x3B, 0x0, - 0x2, 0x0, 0xFF, 0xFF -}; - -const byte HOTEL[] = { - 0x1, 0xFF, 0xFF, 0x61, 0x0, 0x19, 0x0, 0x34, 0x28, 0x28, 0x1A, 0x0, - 0x0, 0x0, 0x1A, 0x1A, 0x0, 0x3, 0x0, 0xFF, 0x1A, 0x0, 0x2, 0x0, 0x1A, 0x0, - 0x1, 0x0, 0xFF, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, - 0x0, 0x28, 0x0, 0x1, 0x0, 0x62, 0x0, 0x2B, 0x0, 0x1, 0x0, 0x62, 0x0, 0x46, - 0x0, 0x2, 0x0, 0x62, 0x0, 0x45, 0x0, 0x1, 0x0, 0x62, 0x0, 0x0E, 0x0, 0x1, 0x0, - 0xFF, 0xFF -}; - -const byte CANTINA[] = { - 0x2, 0xFF, 0xFF, 0x61, 0x0, 0x27, 0x0, 0x40, 0x3A, 0x6C, 0x1B, 0x0, - 0x0, 0x0, 0x1B, 0x1B, 0x0, 0x3, 0x0, 0xFF, 0x1B, 0x0, 0x2, 0x0, 0x1B, 0x0, - 0x1, 0x0, 0x0C8, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, - 0x0, 0x0, 0x0, 0x1, 0x0, 0xFF, 0xFF -}; - -const byte MASSACRE[] = { - 0x2, 0x1D, 0x0, 0x61, 0x0, 0x32, 0x0, 0x20, 0x18, 0x73, 0x1D, 0x0, 0x0, - 0x0, 0x1D, 0x1D, 0x0, 0x3, 0x0, 0xFF, 0x1D, 0x0, 0x2, 0x0, 0x1D, 0x0, 0x1, - 0x0, 0x96, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, - 0x0, 0x0, 0x0, 0x1, 0x0, 0x62, 0x0, 0x0C, 0x0, 0x1, 0x0, 0x62, 0x0, 0x3, 0x0, 0x2, - 0x0, 0x62, 0x0, 0x49, 0x0, 0x2, 0x0, 0x62, 0x0, 0x4A, 0x0, 0x2, 0x0, 0xFF, 0xFF -}; - -const byte TRADE[] = { - 0x1, 0xFF, 0xFF, 0x61, 0x0, 0x18, 0x0, 0x3F, 0x1C, 0x27, 0x1E, 0x0, - 0x0, 0x0, 0x1E, 0x1E, 0x0, 0x3, 0x0, 0xFF, 0x1E, 0x0, 0x2, 0x0, 0x1E, 0x0, - 0x1, 0x0, 0xFF, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF -}; - -const byte BRIDGE[] = { - 0x2, 0x1F, 0x0, 0x61, 0x0, 0x1B, 0x0, 0x40, 0x3F, 0x78, 0x1F, 0x0, 0x0, - 0x0, 0x1F, 0x1F, 0x0, 0x3, 0x0, 0xFF, 0x1F, 0x0, 0x2, 0x0, 0x1F, 0x0, 0x1, - 0x0, 0xFF, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, - 0x0, 0x0, 0x0, 0x2, 0x0, 0x62, 0x0, 0x1F, 0x0, 0x1, 0x0, 0xFF, 0xFF -}; - -const byte DOCK[] = { - 0x1, 0xFF, 0xFF, 0x61, 0x0, 0x1E, 0x0, 0x40, 0x3B, 0x4B, 0x20, 0x0, - 0x0, 0x0, 0xFF, 0x20, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0x1, 0x0, 0xFF, 0x0, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF -}; - -const byte DRIVER[] = { - 0x1, 0x21, 0x0, 0x61, 0x0, 0x28, 0x0, 0x30, 0x10, 0x51, 0x21, 0x0, 0x0, - 0x0, 0x21, 0x21, 0x0, 0x2, 0x0, 0xFF, 0x21, 0x0, 0x1, 0x0, 0xFF, 0xFF, - 0x0, 0x0, 0xFF, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, - 0x0, 0x2E, 0x0, 0x1, 0x0, 0x62, 0x0, 0x2F, 0x0, 0x1, 0x0, 0xFF, 0xFF -}; - -const byte SHORE[] = { - 0x2, 0x24, 0x0, 0x61, 0x0, 0x4, 0x0, 0x3E, 0x3A, 0x32, 0x24, 0x0, 0x0, 0x0, - 0x24, 0x24, 0x0, 0x3, 0x0, 0xFF, 0x24, 0x0, 0x2, 0x0, 0x24, 0x0, 0x1, 0x0, - 0x0B4, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x0, - 0x2D, 0x0, 0x2, 0x0, 0x62, 0x0, 0x1F, 0x0, 0x1, 0x0, 0x62, 0x0, 0x2E, 0x0, - 0x1, 0x0, 0x62, 0x0, 0x2F, 0x0, 0x1, 0x0, 0xFF, 0xFF -}; - -const byte BOAT[] = { - 0x3, 0xFF, 0xFF, 0x61, 0x0, 0x8, 0x0, 0x3F, 0x3F, 0xFF, 0x25, 0x0, - 0x0, 0x0, 0x25, 0x25, 0x0, 0x3, 0x0, 0xFF, 0x25, 0x0, 0x2, 0x0, 0x25, 0x0, - 0x1, 0x0, 0xFF, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x62, 0x0, 0x0, 0x0, 0x2, 0x0, 0x62, 0x0, 0x21, 0x0, 0x1, 0x0, 0x62, 0x0, 0x25, - 0x0, 0x1, 0x0, 0x62, 0x0, 0x1F, 0x0, 0x1, 0x0, 0x62, 0x0, 0x30, 0x0, 0x1, 0x0, - 0x62, 0x0, 0x32, 0x0, 0x1, 0x0, 0xFF, 0xFF -}; - -const byte CABIN[] = { - 0x1, 0xFF, 0xFF, 0x61, 0x0, 0x8, 0x0, 0x40, 0x32, 0x50, 0x26, 0x0, - 0x0, 0x0, 0x26, 0x26, 0x0, 0x3, 0x0, 0xFF, 0x26, 0x0, 0x2, 0x0, 0x26, 0x0, - 0x1, 0x0, 0xFF, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, - 0x0, 0x0, 0x0, 0x1, 0x0, 0x62, 0x0, 0x22, 0x0, 0x2, 0x0, 0x62, 0x0, 0x31, 0x0, - 0x1, 0x0, 0xFF, 0xFF -}; - -const byte CAPTIVE[] = { - 0x2, 0x27, 0x0, 0x61, 0x0, 0x9, 0x0, 0x40, 0x3F, 0x37, 0x27, 0x0, 0x0, 0x0, - 0x27, 0x27, 0x0, 0x3, 0x0, 0xFF, 0x27, 0x0, 0x2, 0x0, 0x27, 0x0, 0x1, 0x0, - 0xFF, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x0, - 0x0, 0x0, 0x4, 0x0, 0x62, 0x0, 0x1B, 0x0, 0x3, 0x0, 0x62, 0x0, 0x1C, 0x0, 0x1, - 0x0, 0x62, 0x0, 0x1F, 0x0, 0x2, 0x0, 0x62, 0x0, 0x23, 0x0, 0x1, 0x0, 0x62, - 0x0, 0x32, 0x0, 0x1, 0x0, 0x62, 0x0, 0x33, 0x0, 0x1, 0x0, 0xFF, 0xFF -}; - -const byte VILLAGE[] = { - 0x2, 0x2A, 0x0, 0x61, 0x0, 0x2E, 0x0, 0x1E, 0x1B, 0x6E, 0x2A, 0x0, 0x0, - 0x0, 0x2A, 0x2A, 0x0, 0x3, 0x0, 0xFF, 0x2A, 0x0, 0x2, 0x0, 0x2A, 0x0, 0x1, - 0x0, 0x0A5, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, - 0x0, 0x2D, 0x0, 0x3, 0x0, 0x62, 0x0, 0x3F, 0x0, 0x1, 0x0, 0x62, 0x0, 0x40, - 0x0, 0x2, 0x0, 0xFF, 0xFF -}; - -const byte TREE[] = { - 0x2, 0x2C, 0x0, 0x61, 0x0, 0x31, 0x0, 0x1E, 0x1D, 0x0BE, 0x2C, 0x0, 0x0, - 0x0, 0x2C, 0x2C, 0x0, 0x3, 0x0, 0xFF, 0x2C, 0x0, 0x2, 0x0, 0x2C, 0x0, 0x1, - 0x0, 0x50, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, - 0x0, 0x0, 0x0, 0x2, 0x0, 0x62, 0x0, 0x2E, 0x0, 0x1, 0x0, 0x62, 0x0, 0x2F, 0x0, - 0x1, 0x0, 0x62, 0x0, 0x4, 0x0, 0x1, 0x0, 0x62, 0x0, 0x42, 0x0, 0x1, 0x0, 0xFF, - 0xFF -}; - -const byte CANOE[] = { - 0x1, 0x2D, 0x0, 0x61, 0x0, 0x2F, 0x0, 0x1E, 0x1D, 0x78, 0x2D, 0x0, 0x0, - 0x0, 0x2D, 0x2D, 0x0, 0x3, 0x0, 0xFF, 0x2D, 0x0, 0x2, 0x0, 0x2D, 0x0, 0x1, - 0x0, 0xFF, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, - 0x0, 0x40, 0x0, 0x3, 0x0, 0x62, 0x0, 0x41, 0x0, 0x2, 0x0, 0x62, 0x0, 0x2E, - 0x0, 0x2, 0x0, 0x62, 0x0, 0x2F, 0x0, 0x2, 0x0, 0x62, 0x0, 0x16, 0x0, 0x1, 0x0, - 0xFF, 0xFF -}; - -const byte INTREE[] = { - 0x1, 0xFF, 0xFF, 0x61, 0x0, 0x33, 0x0, 0x28, 0x1E, 0x32, 0x2E, 0x0, - 0x0, 0x0, 0x2E, 0x2E, 0x0, 0x3, 0x0, 0xFF, 0x2E, 0x0, 0x2, 0x0, 0x2E, 0x0, - 0x1, 0x0, 0x0F0, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF -}; - -const byte FALLS[] = { - 0x1, 0xFF, 0xFF, 0x61, 0x0, 0x3B, 0x0, 0x28, 0x1E, 0x32, 0x2F, 0x0, - 0x0, 0x0, 0x2F, 0x2F, 0x0, 0x3, 0x0, 0xFF, 0x2F, 0x0, 0x2, 0x0, 0x2F, 0x0, - 0x1, 0x0, 0xFF, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, - 0x0, 0x4, 0x0, 0x1, 0x0, 0x62, 0x0, 0x2A, 0x0, 0x1, 0x0, 0xFF, 0xFF -}; - -const byte WATERFALL[] = { - 0x1, 0x36, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0x28, 0x1E, 0x6E, 0x36, - 0x0, 0x0, 0x0, 0x36, 0x36, 0x0, 0x3, 0x0, 0xFF, 0x36, 0x0, 0x2, 0x0, 0x36, - 0x0, 0x1, 0x0, 0xFF, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0x36, 0x0, 0x4, - 0x0, 0xFF, 0xFF, 0x62, 0x0, 0x1F, 0x0, 0x1, 0x0, 0xFF, 0xFF -}; - -const byte INWATER[] = { - 0x2, 0xFF, 0xFF, 0x61, 0x0, 0x36, 0x0, 0x40, 0x3F, 0x2A, 0x37, 0x0, - 0x0, 0x0, 0x37, 0x37, 0x0, 0x3, 0x0, 0xFF, 0x37, 0x0, 0x2, 0x0, 0x37, 0x0, - 0x1, 0x0, 0xFF, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, - 0x0, 0x0, 0x0, 0x1, 0x0, 0x62, 0x0, 0x38, 0x0, 0x1, 0x0, 0xFF, 0xFF -}; - -const byte CAVE[] = { - 0x2, 0x39, 0x0, 0x61, 0x0, 0x37, 0x0, 0x32, 0x14, 0x73, 0x39, 0x0, 0x0, - 0x0, 0x39, 0x39, 0x0, 0x3, 0x0, 0xFF, 0x39, 0x0, 0x2, 0x0, 0x39, 0x0, 0x1, - 0x0, 0x0B4, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, - 0x0, 0x0, 0x0, 0x1, 0x0, 0x62, 0x0, 0x1F, 0x0, 0x1, 0x0, 0x62, 0x0, 0x4B, 0x0, - 0x2, 0x0, 0x62, 0x0, 0x4C, 0x0, 0x2, 0x0, 0xFF, 0xFF -}; - -const byte PIT[] = { - 0x2, 0xFF, 0xFF, 0x61, 0x0, 0x38, 0x0, 0x41, 0x3F, 0x19, 0x3D, 0x0, - 0x0, 0x0, 0x3D, 0x3D, 0x0, 0x3, 0x0, 0x3E, 0x3D, 0x0, 0x4, 0x0, 0xFF, 0x3D, - 0x0, 0x2, 0x0, 0x3D, 0x0, 0x1, 0x0, 0x0BE, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0x62, 0x0, 0x0, 0x0, 0x2, 0x0, 0x62, 0x0, 0x27, 0x0, 0x1, 0x0, - 0x62, 0x0, 0x4D, 0x0, 0x2, 0x0, 0xFF, 0xFF, 0x0 -}; - -const byte *const ROOM_TABLE[] = { - CREDITS, nullptr, nullptr, nullptr, ALLISTER, HALL, JASONLAB, nullptr, - ALLENLAB, OUTVAULT, VAULT, LIBRARY, JASAPT, RANSACKED, MEAN1, FLYSOUTH, - CUZCO, INAIR, GREENMONKEY, INPLANE, PILFALL, COCKPIT, CRASH, SINKING, - JNGLWLK, TOWN, HOTEL, CANTINA, nullptr, MASSACRE, TRADE, BRIDGE, DOCK, - DRIVER, nullptr, nullptr, SHORE, BOAT, CABIN, CAPTIVE, nullptr, - nullptr, VILLAGE, nullptr, TREE, CANOE, INTREE, FALLS, nullptr, - nullptr, nullptr, nullptr, nullptr, nullptr, WATERFALL, INWATER, nullptr, - CAVE, nullptr, nullptr, nullptr, PIT, nullptr, nullptr -}; - -const char *const ROOM_DESCR[] = { - "Credits", nullptr, nullptr, nullptr, "Outside of Allister Center", - "Hall", "Jason's Lab", nullptr, "Allen's Lab", "Outside of the Vault", - "Inside the Vault", "Reader", "Jason's Apartment", "Jason's ransacked apartment", "Cutscene 1", - "TBD FLYSOUTH", "Cuzco Airport", "TBD INAIR", "Green Monkey Club", "In Plane", - "TBD PILFALL", "TBD COCKPIT", "TBD CRASH", "TBD SINKING", "Cutscene Jungle Walk", - "TBD TOWN", "TBD HOTEL", "TBD CANTINA", nullptr, "TBD MASSACRE", - "TBD TRADE", "TBD BRIDGE", "TBD DOCK", "TBD DRIVER", nullptr, - nullptr, "TBD SHORE", "TBD BOAT", "TBD CABIN", "TBD CAPTIVE", - nullptr, nullptr, "TBD VILLAGE", nullptr, "TBD TREE", - "TBD CANOE", "TBD INTREE", "TBD FALLS", nullptr, nullptr, - nullptr, nullptr, nullptr, nullptr, "TBD WATERFALL", - "TBD INWATER", nullptr, "Cave Bridge", nullptr, nullptr, - nullptr, "Pit with Ants", nullptr, nullptr -}; - -const byte ROOM_TABLE1_DEMO[] = { - 0x02, 0x61, 0x00, 0x03, 0x00, 0x30, 0x22, 0x30, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF -}; - -const byte ROOM_TABLE5_DEMO[] = { - 0x00, 0x61, 0x00, 0x0E, 0x00, 0x36, 0x0F, 0x5E, 0x04, 0x00, - 0x00, 0x00, 0x04, 0x04, 0x00, 0x03, 0x00, 0xFF, 0x04, 0x00, - 0x02, 0x00, 0x04, 0x00, 0x01, 0x00, 0x8C, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x62, 0x00, 0x0B, 0x00, 0x01, 0x00, 0x62, 0x00, 0x0C, 0x00, - 0x01, 0x00, 0x62, 0x00, 0x0D, 0x00, 0x01, 0x00, 0xFF, 0xFF -}; - -const byte ROOM_TABLE6_DEMO[] = { - 0x00, 0x61, 0x00, 0x0E, 0x00, 0x40, 0x3E, 0x1A, 0x05, 0x00, - 0x00, 0x00, 0x05, 0x05, 0x00, 0x03, 0x00, 0xFF, 0x05, 0x00, - 0x02, 0x00, 0x05, 0x00, 0x01, 0x00, 0xFF, 0x30, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x00, 0x00, 0x00, 0x02, 0x00, - 0x62, 0x00, 0x12, 0x00, 0x03, 0x00, 0x62, 0x00, 0x13, 0x00, - 0x01, 0x00, 0x62, 0x00, 0x14, 0x00, 0x02, 0x00, 0x62, 0x00, - 0x04, 0x00, 0x01, 0x00, 0xFF, 0xFF -}; - -const byte ROOM_TABLE7_DEMO[] = { - 0x01, 0x61, 0x00, 0x0D, 0x00, 0x40, 0x20, 0xC4, 0x06, 0x00, - 0x00, 0x00, 0x06, 0x06, 0x00, 0x03, 0x00, 0xFF, 0x06, 0x00, - 0x02, 0x00, 0x06, 0x00, 0x01, 0x00, 0xFF, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x62, 0x00, 0x01, 0x00, 0x01, 0x00, 0x62, 0x00, 0x02, 0x00, - 0x01, 0x00, 0x62, 0x00, 0x03, 0x00, 0x02, 0x00, 0x62, 0x00, - 0x26, 0x00, 0x01, 0x00, 0xFF, 0xFF -}; - -const byte ROOM_TABLE9_DEMO[] = { - 0x01, 0x61, 0x00, 0x0D, 0x00, 0x40, 0x20, 0xC4, 0x08, 0x00, - 0x00, 0x00, 0x08, 0x08, 0x00, 0x03, 0x00, 0xFF, 0x08, 0x00, - 0x02, 0x00, 0x08, 0x00, 0x01, 0x00, 0xFF, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x62, 0x00, 0x07, 0x00, 0x01, 0x00, 0x62, 0x00, 0x08, 0x00, - 0x02, 0x00, 0x62, 0x00, 0x09, 0x00, 0x01, 0x00, 0x62, 0x00, - 0x0A, 0x00, 0x01, 0x00, 0xFF, 0xFF -}; - -const byte ROOM_TABLE10_DEMO[] = { - 0x00, 0x61, 0x00, 0x0E, 0x00, 0x30, 0x18, 0x9B, 0x09, 0x00, - 0x00, 0x00, 0x09, 0x09, 0x00, 0x03, 0x00, 0xFF, 0x09, 0x00, - 0x02, 0x00, 0x09, 0x00, 0x01, 0x00, 0xB4, 0x10, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x00, 0x00, 0x00, 0x03, 0x00, - 0x62, 0x00, 0x04, 0x00, 0x01, 0x00, 0x62, 0x00, 0x05, 0x00, - 0x02, 0x00, 0x62, 0x00, 0x06, 0x00, 0x02, 0x00, 0xFF, 0xFF -}; - -const byte ROOM_TABLE11_DEMO[] = { - 0x01, 0x61, 0x00, 0x0E, 0x00, 0x40, 0x30, 0x14, 0x0A, 0x00, - 0x00, 0x00, 0x0A, 0x0A, 0x00, 0x03, 0x00, 0xFF, 0x0A, 0x00, - 0x02, 0x00, 0x0A, 0x00, 0x01, 0x00, 0xFF, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x62, 0x00, 0x15, 0x00, 0x01, 0x00, 0x62, 0x00, 0x16, 0x00, - 0x01, 0x00, 0xFF, 0xFF -}; - -const byte ROOM_TABLE12_DEMO[] = { - 0x01, 0x61, 0x00, 0x0E, 0x00, 0x40, 0x3A, 0x22, 0x0B, 0x00, - 0x00, 0x00, 0x0B, 0x0B, 0x00, 0x03, 0x00, 0xFF, 0x0B, 0x00, - 0x02, 0x00, 0x0B, 0x00, 0x01, 0x00, 0xFF, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x62, 0x00, 0x01, 0x00, 0x01, 0x00, 0xFF, 0xFF -}; - -const byte ROOM_TABLE13_DEMO[] = { - 0x01, 0x61, 0x00, 0x08, 0x00, 0x40, 0x30, 0x14, 0x0C, 0x00, - 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x03, 0x00, 0xFF, 0x0C, 0x00, - 0x02, 0x00, 0x0C, 0x00, 0x01, 0x00, 0xFF, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x00, 0x18, 0x00, 0x02, 0x00, - 0x62, 0x00, 0x17, 0x00, 0x01, 0x00, 0x62, 0x00, 0x11, 0x00, - 0x01, 0x00, 0xFF, 0xFF -}; - -const byte ROOM_TABLE14_DEMO[] = { - 0x01, 0x61, 0x00, 0x0D, 0x00, 0x40, 0x36, 0x2C, 0x0D, 0x00, - 0x00, 0x00, 0x0D, 0x0D, 0x00, 0x03, 0x00, 0xFF, 0x0D, 0x00, - 0x02, 0x00, 0x0D, 0x00, 0x01, 0x00, 0xFF, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF -}; - -const byte ROOM_TABLE15_DEMO[] = { - 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x40, 0x3E, 0x33, 0xFF, 0xFF, - 0x00, 0x00, 0xFF, 0x0E, 0x00, 0x05, 0x00, 0x0E, 0x00, 0x04, - 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF -}; - -const byte ROOM_TABLE16_DEMO[] = { - 0x01, 0x61, 0x00, 0x10, 0x00, 0x28, 0x0C, 0x5E, 0x0F, 0x00, - 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x02, 0x00, 0xFF, 0x0F, 0x00, - 0x01, 0x00, 0xFF, 0xFF, 0x01, 0x00, 0xFF, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF -}; - -const byte ROOM_TABLE17_DEMO[] = { - 0x02, 0x61, 0x00, 0x10, 0x00, 0x40, 0x20, 0x30, 0x10, 0x00, - 0x00, 0x00, 0x10, 0x10, 0x00, 0x03, 0x00, 0xFF, 0x10, 0x00, - 0x02, 0x00, 0x10, 0x00, 0x01, 0x00, 0x6E, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x00, 0x00, 0x00, 0x01, 0x00, - 0xFF, 0xFF -}; - -const byte ROOM_TABLE18_DEMO[] = { - 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x28, 0x19, 0x2B, 0x11, 0x00, - 0x00, 0x00, 0x11, 0x11, 0x00, 0x03, 0x00, 0xFF, 0x11, 0x00, - 0x02, 0x00, 0x11, 0x00, 0x01, 0x00, 0xFF, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF -}; - -const byte ROOM_TABLE19_DEMO[] = { - 0x01, 0x61, 0x00, 0x11, 0x00, 0x2D, 0x14, 0x3C, 0x12, 0x00, - 0x00, 0x00, 0x12, 0x12, 0x00, 0x03, 0x00, 0xFF, 0x12, 0x00, - 0x02, 0x00, 0x12, 0x00, 0x01, 0x00, 0xFF, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF -}; - -const byte ROOM_TABLE20_DEMO[] = { - 0x02, 0x61, 0x00, 0x12, 0x00, 0x2D, 0x28, 0x28, 0x13, 0x00, - 0x00, 0x00, 0x13, 0x13, 0x00, 0x03, 0x00, 0xFF, 0x13, 0x00, - 0x02, 0x00, 0x13, 0x00, 0x01, 0x00, 0xFF, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x00, 0x00, 0x00, 0x02, 0x00, - 0x62, 0x00, 0x29, 0x00, 0x01, 0x00, 0x62, 0x00, 0x24, 0x00, - 0x01, 0x00, 0xFF, 0xFF -}; - -const byte ROOM_TABLE21_DEMO[] = { - 0x01, 0x61, 0x00, 0x16, 0x00, 0x28, 0x0C, 0x5E, 0x14, 0x00, - 0x00, 0x00, 0x14, 0x14, 0x00, 0x02, 0x00, 0xFF, 0x14, 0x00, - 0x01, 0x00, 0xFF, 0xFF, 0x01, 0x00, 0xFF, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF -}; - -const byte ROOM_TABLE22_DEMO[] = { - 0x01, 0x61, 0x00, 0x12, 0x00, 0x3C, 0x2A, 0x29, 0x15, 0x00, - 0x00, 0x00, 0x15, 0x15, 0x00, 0x03, 0x00, 0xFF, 0x15, 0x00, - 0x02, 0x00, 0x15, 0x00, 0x01, 0x00, 0xFF, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x00, 0x23, 0x00, 0x01, 0x00, - 0xFF, 0xFF -}; - -const byte ROOM_TABLE23_DEMO[] = { - 0x01, 0x61, 0x00, 0x13, 0x00, 0x40, 0x2D, 0x64, 0x16, 0x00, - 0x00, 0x00, 0xFF, 0x16, 0x00, 0x01, 0x00, 0xFF, 0xFF, 0x00, - 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x16, 0x00, 0x02, - 0x00, 0xFF, 0xFF, 0x62, 0x00, 0x2A, 0x00, 0x01, 0x00, 0xFF, - 0xFF -}; - -const byte ROOM_TABLE24_DEMO[] = { - 0x02, 0x61, 0x00, 0x14, 0x00, 0x40, 0x3C, 0x19, 0x17, 0x00, - 0x00, 0x00, 0x17, 0x17, 0x00, 0x03, 0x00, 0xFF, 0x17, 0x00, - 0x02, 0x00, 0x17, 0x00, 0x01, 0x00, 0xFF, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x00, 0x00, 0x00, 0x01, 0x00, - 0xFF, 0xFF -}; - -const byte ROOM_TABLE25_DEMO[] = { - 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0x40, 0x3F, 0x5A, 0x18, 0x00, - 0x00, 0x00, 0x18, 0x18, 0x00, 0x02, 0x00, 0xFF, 0x18, 0x00, - 0x01, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xDC, 0xA0, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x00, 0x00, 0x00, 0x01, 0x00, - 0xFF, 0xFF -}; - -const byte ROOM_TABLE26_DEMO[] = { - 0x02, 0x61, 0x00, 0x17, 0x00, 0x3E, 0x32, 0x80, 0x19, 0x00, - 0x00, 0x00, 0x19, 0x19, 0x00, 0x03, 0x00, 0xFF, 0x19, 0x00, - 0x02, 0x00, 0x19, 0x00, 0x01, 0x00, 0x64, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x00, 0x00, 0x00, 0x01, 0x00, - 0xFF, 0xFF -}; - -const byte ROOM_TABLE27_DEMO[] = { - 0x01, 0x61, 0x00, 0x19, 0x00, 0x34, 0x28, 0x28, 0x1A, 0x00, - 0x00, 0x00, 0x1A, 0x1A, 0x00, 0x03, 0x00, 0xFF, 0x1A, 0x00, - 0x02, 0x00, 0x1A, 0x00, 0x01, 0x00, 0xFF, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x00, 0x28, 0x00, 0x01, 0x00, - 0x62, 0x00, 0x2B, 0x00, 0x01, 0x00, 0xFF, 0xFF -}; - -const byte ROOM_TABLE28_DEMO[] = { - 0x02, 0x61, 0x00, 0x18, 0x00, 0x40, 0x3A, 0x6C, 0x1B, 0x00, - 0x00, 0x00, 0x1B, 0x1B, 0x00, 0x03, 0x00, 0xFF, 0x1B, 0x00, - 0x02, 0x00, 0x1B, 0x00, 0x01, 0x00, 0xC8, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x00, 0x00, 0x00, 0x01, 0x00, - 0xFF, 0xFF -}; - -const byte ROOM_TABLE30_DEMO[] = { - 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0x20, 0x18, 0x73, 0x1D, 0x00, - 0x00, 0x00, 0x1D, 0x1D, 0x00, 0x03, 0x00, 0xFF, 0x1D, 0x00, - 0x02, 0x00, 0x1D, 0x00, 0x01, 0x00, 0x80, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF -}; - -const byte ROOM_TABLE31_DEMO[] = { - 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x1C, 0x27, 0x1E, 0x00, - 0x00, 0x00, 0x1E, 0x1E, 0x00, 0x03, 0x00, 0xFF, 0x1E, 0x00, - 0x02, 0x00, 0x1E, 0x00, 0x01, 0x00, 0xFF, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF -}; - -const byte ROOM_TABLE32_DEMO[] = { - 0x02, 0x61, 0x00, 0x1B, 0x00, 0x40, 0x10, 0x78, 0x1F, 0x00, - 0x00, 0x00, 0x1F, 0x1F, 0x00, 0x03, 0x00, 0xFF, 0x1F, 0x00, - 0x02, 0x00, 0x1F, 0x00, 0x01, 0x00, 0xFE, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x00, 0x00, 0x00, 0x02, 0x00, - 0x62, 0x00, 0x1F, 0x00, 0x01, 0x00, 0xFF, 0xFF -}; - -const byte ROOM_TABLE33_DEMO[] = { - 0x01, 0x61, 0x00, 0x1E, 0x00, 0x40, 0x3B, 0x4B, 0x20, 0x00, - 0x00, 0x00, 0x20, 0x20, 0x00, 0x03, 0x00, 0xFF, 0x20, 0x00, - 0x02, 0x00, 0x20, 0x00, 0x01, 0x00, 0xFF, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF -}; - -const byte ROOM_TABLE34_DEMO[] = { - 0x01, 0x61, 0x00, 0x04, 0x00, 0x30, 0x10, 0x51, 0x21, 0x00, - 0x00, 0x00, 0x21, 0x21, 0x00, 0x02, 0x00, 0xFF, 0x21, 0x00, - 0x01, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x00, 0x2E, 0x00, 0x01, 0x00, - 0x62, 0x00, 0x2F, 0x00, 0x01, 0x00, 0xFF, 0xFF -}; - -const byte ROOM_TABLE37_DEMO[] = { - 0x02, 0x61, 0x00, 0x04, 0x00, 0x3E, 0x3A, 0x32, 0x24, 0x00, - 0x00, 0x00, 0x24, 0x24, 0x00, 0x03, 0x00, 0xFF, 0x24, 0x00, - 0x02, 0x00, 0x24, 0x00, 0x01, 0x00, 0xB4, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x00, 0x2D, 0x00, 0x02, 0x00, - 0x62, 0x00, 0x1F, 0x00, 0x01, 0x00, 0x62, 0x00, 0x2E, 0x00, - 0x01, 0x00, 0x62, 0x00, 0x2F, 0x00, 0x01, 0x00, 0xFF, 0xFF -}; - -const byte ROOM_TABLE38_DEMO[] = { - 0x03, 0x61, 0x00, 0x08, 0x00, 0x3F, 0x3F, 0xFF, 0x25, 0x00, - 0x00, 0x00, 0x25, 0x25, 0x00, 0x03, 0x00, 0xFF, 0x25, 0x00, - 0x02, 0x00, 0x25, 0x00, 0x01, 0x00, 0xFF, 0x40, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x00, 0x00, 0x00, 0x02, 0x00, - 0x62, 0x00, 0x21, 0x00, 0x01, 0x00, 0x62, 0x00, 0x25, 0x00, - 0x01, 0x00, 0x62, 0x00, 0x1F, 0x00, 0x01, 0x00, 0x62, 0x00, - 0x30, 0x00, 0x01, 0x00, 0x62, 0x00, 0x32, 0x00, 0x01, 0x00, - 0xFF, 0xFF -}; - -const byte ROOM_TABLE39_DEMO[] = { - 0x01, 0x61, 0x00, 0x08, 0x00, 0x40, 0x32, 0x50, 0x26, 0x00, - 0x00, 0x00, 0x26, 0x26, 0x00, 0x03, 0x00, 0xFF, 0x26, 0x00, - 0x02, 0x00, 0x26, 0x00, 0x01, 0x00, 0xFF, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x62, 0x00, 0x22, 0x00, 0x02, 0x00, 0x62, 0x00, 0x31, 0x00, - 0x01, 0x00, 0xFF, 0xFF -}; - -const byte ROOM_TABLE40_DEMO[] = { - 0x02, 0x61, 0x00, 0x09, 0x00, 0x40, 0x3F, 0x37, 0x27, 0x00, - 0x00, 0x00, 0x27, 0x27, 0x00, 0x03, 0x00, 0xFF, 0x27, 0x00, - 0x02, 0x00, 0x27, 0x00, 0x01, 0x00, 0xFF, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x00, 0x00, 0x00, 0x04, 0x00, - 0x62, 0x00, 0x1B, 0x00, 0x03, 0x00, 0x62, 0x00, 0x1C, 0x00, - 0x01, 0x00, 0x62, 0x00, 0x1F, 0x00, 0x02, 0x00, 0x62, 0x00, - 0x23, 0x00, 0x01, 0x00, 0x62, 0x00, 0x32, 0x00, 0x01, 0x00, - 0xFF, 0xFF -}; - -const byte ROOM_TABLE43_DEMO[] = { - 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0x1E, 0x1B, 0x6E, 0x2A, 0x00, - 0x00, 0x00, 0x2A, 0x2A, 0x00, 0x03, 0x00, 0xFF, 0x2A, 0x00, - 0x02, 0x00, 0x2A, 0x00, 0x01, 0x00, 0xA5, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x00, 0x00, 0x00, 0x01, 0x00, - 0xFF, 0xFF -}; - -const byte ROOM_TABLE45_DEMO[] = { - 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0x1E, 0x1D, 0xBE, 0x2C, 0x00, - 0x00, 0x00, 0x2C, 0x2C, 0x00, 0x03, 0x00, 0xFF, 0x2C, 0x00, - 0x02, 0x00, 0x2C, 0x00, 0x01, 0x00, 0x50, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x00, 0x00, 0x00, 0x01, 0x00, - 0xFF, 0xFF -}; - -const byte ROOM_TABLE46_DEMO[] = { - 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x1E, 0x1D, 0x78, 0x2D, 0x00, - 0x00, 0x00, 0x2D, 0x2D, 0x00, 0x03, 0x00, 0xFF, 0x2D, 0x00, - 0x02, 0x00, 0x2D, 0x00, 0x01, 0x00, 0xFF, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF -}; - -const byte ROOM_TABLE47_DEMO[] = { - 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x28, 0x1E, 0x32, 0x2E, 0x00, - 0x00, 0x00, 0x2E, 0x2E, 0x00, 0x03, 0x00, 0xFF, 0x2E, 0x00, - 0x02, 0x00, 0x2E, 0x00, 0x01, 0x00, 0xF0, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF -}; - -const byte ROOM_TABLE48_DEMO[] = { - 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x28, 0x1E, 0x32, 0x2F, 0x00, - 0x00, 0x00, 0x2F, 0x2F, 0x00, 0x03, 0x00, 0xFF, 0x2F, 0x00, - 0x02, 0x00, 0x2F, 0x00, 0x01, 0x00, 0xFF, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF -}; - -const byte ROOM_TABLE51_DEMO[] = { - 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x28, 0x1E, 0x32, 0xFF, 0xFF, - 0x00, 0x00, 0xFF, 0x32, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x04, - 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x32, - 0x00, 0x01, 0x00, 0x01, 0x00, 0xFF, 0xFF -}; - -const byte ROOM_TABLE55_DEMO[] = { - 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x28, 0x1E, 0x6E, 0x36, 0x00, - 0x00, 0x00, 0x36, 0x36, 0x00, 0x03, 0x00, 0xFF, 0x36, 0x00, - 0x02, 0x00, 0x36, 0x00, 0x01, 0x00, 0xFF, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0x36, 0x00, 0x04, 0x00, 0xFF, 0xFF, 0xFF, 0xFF -}; - -const byte ROOM_TABLE58_DEMO[] = { - 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0x32, 0x14, 0x73, 0x39, 0x00, - 0x00, 0x00, 0x39, 0x39, 0x00, 0x03, 0x00, 0xFF, 0x39, 0x00, - 0x02, 0x00, 0x39, 0x00, 0x01, 0x00, 0xB4, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x00, 0x00, 0x00, 0x01, 0x00, - 0xFF, 0xFF -}; - -const byte ROOM_TABLE62_DEMO[] = { - 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0x41, 0x3F, 0x19, 0x3D, 0x00, - 0x00, 0x00, 0x3D, 0x3D, 0x00, 0x03, 0x00, 0x3E, 0x3D, 0x00, - 0x04, 0x00, 0xFF, 0x3D, 0x00, 0x02, 0x00, 0x3D, 0x00, 0x01, - 0x00, 0xBE, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, - 0x00, 0x00, 0x00, 0x01, 0x00, 0xFF, 0xFF, 0x00 -}; - -const byte *const ROOM_TABLE_DEMO[] = { - ROOM_TABLE1_DEMO, nullptr, nullptr, nullptr, ROOM_TABLE5_DEMO, - ROOM_TABLE6_DEMO, ROOM_TABLE7_DEMO, nullptr, ROOM_TABLE9_DEMO, ROOM_TABLE10_DEMO, - ROOM_TABLE11_DEMO, ROOM_TABLE12_DEMO, ROOM_TABLE13_DEMO, ROOM_TABLE14_DEMO, ROOM_TABLE15_DEMO, - ROOM_TABLE16_DEMO, ROOM_TABLE17_DEMO, ROOM_TABLE18_DEMO, ROOM_TABLE19_DEMO, ROOM_TABLE20_DEMO, - ROOM_TABLE21_DEMO, ROOM_TABLE22_DEMO, ROOM_TABLE23_DEMO, ROOM_TABLE24_DEMO, ROOM_TABLE25_DEMO, - ROOM_TABLE26_DEMO, ROOM_TABLE27_DEMO, ROOM_TABLE28_DEMO, nullptr, ROOM_TABLE30_DEMO, - ROOM_TABLE31_DEMO, ROOM_TABLE32_DEMO, ROOM_TABLE33_DEMO, ROOM_TABLE34_DEMO, nullptr, - nullptr, ROOM_TABLE37_DEMO, ROOM_TABLE38_DEMO, ROOM_TABLE39_DEMO, ROOM_TABLE40_DEMO, - nullptr, nullptr, ROOM_TABLE43_DEMO, nullptr, ROOM_TABLE45_DEMO, - ROOM_TABLE46_DEMO, ROOM_TABLE47_DEMO, ROOM_TABLE48_DEMO, nullptr, nullptr, - ROOM_TABLE51_DEMO, nullptr, nullptr, nullptr, ROOM_TABLE55_DEMO, - nullptr, nullptr, ROOM_TABLE58_DEMO, nullptr, nullptr, - nullptr, ROOM_TABLE62_DEMO, nullptr, nullptr -}; - -const int ROOM_NUMB = 63; - -const byte ELAINE[] = { - 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0x0, 0x0, 0x0, 0x0, 0x41, 0x41, 0x0, 0x1, 0x0, 0xFF, 0x41, 0x0, 0x2, - 0x0, 0x41, 0x0, 0x0, 0x0, 0x41, 0x0, 0x3, 0x0, 0x41, 0x0, 0x25, 0x0, 0x41, - 0x0, 0x4, 0x0, 0x41, 0x0, 0x26, 0x0, 0x41, 0x0, 0x5, 0x0, 0x41, 0x0, 0x27, - 0x0, 0x41, 0x0, 0x6, 0x0, 0x41, 0x0, 0x28, 0x0, 0x41, 0x0, 0x7, 0x0, 0x41, - 0x0, 0x29, 0x0, 0x41, 0x0, 0x8, 0x0, 0x41, 0x0, 0x2A, 0x0, 0x41, 0x0, 0x9, - 0x0, 0x41, 0x0, 0x2B, 0x0, 0x41, 0x0, 0x0A, 0x0, 0x41, 0x0, 0x2C, 0x0, 0x41, - 0x0, 0x0B, 0x0, 0x41, 0x0, 0x2D, 0x0, 0x41, 0x0, 0x0C, 0x0, 0x41, 0x0, 0x2E, - 0x0, 0x41, 0x0, 0x0D, 0x0, 0x41, 0x0, 0x2F, 0x0, 0x41, 0x0, 0x0E, 0x0, 0x41, - 0x0, 0x30, 0x0, 0x41, 0x0, 0x0F, 0x0, 0x41, 0x0, 0x31, 0x0, 0x41, 0x0, 0x10, - 0x0, 0x41, 0x0, 0x32, 0x0, 0x41, 0x0, 0x11, 0x0, 0x41, 0x0, 0x33, 0x0, 0x41, - 0x0, 0x12, 0x0, 0x41, 0x0, 0x34, 0x0, 0x41, 0x0, 0x13, 0x0, 0x41, 0x0, 0x35, - 0x0, 0x41, 0x0, 0x14, 0x0, 0x41, 0x0, 0x36, 0x0, 0x41, 0x0, 0x15, 0x0, 0x41, - 0x0, 0x37, 0x0, 0x41, 0x0, 0x16, 0x0, 0x41, 0x0, 0x38, 0x0, 0x41, 0x0, 0x17, - 0x0, 0x41, 0x0, 0x39, 0x0, 0x41, 0x0, 0x18, 0x0, 0x41, 0x0, 0x3A, 0x0, 0x41, - 0x0, 0x19, 0x0, 0x41, 0x0, 0x3B, 0x0, 0x41, 0x0, 0x1A, 0x0, 0x41, 0x0, 0x3C, - 0x0, 0x41, 0x0, 0x1B, 0x0, 0x41, 0x0, 0x3D, 0x0, 0x41, 0x0, 0x1C, 0x0, 0x41, - 0x0, 0x3E, 0x0, 0x41, 0x0, 0x1D, 0x0, 0x41, 0x0, 0x3F, 0x0, 0x41, 0x0, 0x1E, - 0x0, 0x41, 0x0, 0x40, 0x0, 0x41, 0x0, 0x1F, 0x0, 0x41, 0x0, 0x41, 0x0, 0x41, - 0x0, 0x20, 0x0, 0x41, 0x0, 0x42, 0x0, 0x41, 0x0, 0x21, 0x0, 0x41, 0x0, 0x43, - 0x0, 0x41, 0x0, 0x22, 0x0, 0x41, 0x0, 0x44, 0x0, 0x41, 0x0, 0x23, 0x0, 0x41, - 0x0, 0x45, 0x0, 0x41, 0x0, 0x24, 0x0, 0x41, 0x0, 0x46, 0x0, 0xFF, 0xFF -}; - -const byte LIB[] = { - 0x1, 0xFF, 0xFF, 0x42, 0x0, 0x2, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, - 0x0, 0x0, 0x0, 0x0, 0x42, 0x42, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0xFF, 0x2, - 0x0, 0x42, 0x0, 0x0, 0x0, 0x42, 0x0, 0x3, 0x0, 0x42, 0x0, 0x18, 0x0, 0x42, - 0x0, 0x4, 0x0, 0x42, 0x0, 0x19, 0x0, 0x42, 0x0, 0x5, 0x0, 0x42, 0x0, 0x1A, - 0x0, 0x42, 0x0, 0x6, 0x0, 0x42, 0x0, 0x1B, 0x0, 0x42, 0x0, 0x7, 0x0, 0x42, - 0x0, 0x1C, 0x0, 0x42, 0x0, 0x8, 0x0, 0x42, 0x0, 0x1D, 0x0, 0x42, 0x0, 0x9, - 0x0, 0x42, 0x0, 0x1E, 0x0, 0x42, 0x0, 0x0A, 0x0, 0x42, 0x0, 0x1F, 0x0, 0x42, - 0x0, 0x0B, 0x0, 0x42, 0x0, 0x20, 0x0, 0x42, 0x0, 0x0C, 0x0, 0x42, 0x0, 0x21, - 0x0, 0x42, 0x0, 0x0D, 0x0, 0x42, 0x0, 0x22, 0x0, 0x42, 0x0, 0x0E, 0x0, 0x42, - 0x0, 0x23, 0x0, 0x42, 0x0, 0x0F, 0x0, 0x42, 0x0, 0x24, 0x0, 0x42, 0x0, 0x10, - 0x0, 0x42, 0x0, 0x25, 0x0, 0x42, 0x0, 0x11, 0x0, 0x42, 0x0, 0x26, 0x0, 0x42, - 0x0, 0x12, 0x0, 0x42, 0x0, 0x27, 0x0, 0x42, 0x0, 0x13, 0x0, 0x42, 0x0, 0x28, - 0x0, 0x42, 0x0, 0x14, 0x0, 0x42, 0x0, 0x29, 0x0, 0x42, 0x0, 0x15, 0x0, 0x42, - 0x0, 0x2A, 0x0, 0x42, 0x0, 0x16, 0x0, 0x42, 0x0, 0x2B, 0x0, 0x42, 0x0, 0x17, - 0x0, 0x42, 0x0, 0x2C, 0x0, 0xFF, 0xFF -}; - -const byte FLASHBACK[] = { - 0x2, 0x1B, 0x0, 0x1C, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0x0, - 0x0, 0x0, 0x0, 0xFF, 0xFF, 0xFF, 0x26, 0x0, 0x1C, 0x0, 0x0, 0x0, 0x1C, - 0x0, 0x5, 0x0, 0x1C, 0x0, 0x0E, 0x0, 0x1C, 0x0, 0x6, 0x0, 0x1C, 0x0, 0x0F, - 0x0, 0x1C, 0x0, 0x7, 0x0, 0x1C, 0x0, 0x0C, 0x0, 0x1C, 0x0, 0x8, 0x0, 0x1C, - 0x0, 0x0D, 0x0, 0x2, 0x0, 0x1, 0x0, 0x1C, 0x0, 0x10, 0x0, 0x2, 0x0, 0x2, 0x0, 0x1C, - 0x0, 0x11, 0x0, 0x1C, 0x0, 0x9, 0x0, 0x1C, 0x0, 0x12, 0x0, 0x1C, 0x0, 0x0A, - 0x0, 0x1C, 0x0, 0x13, 0x0, 0x1C, 0x0, 0x0B, 0x0, 0x1C, 0x0, 0x14, 0x0, 0x1C, - 0x0, 0x0B, 0x0, 0x1C, 0x0, 0x15, 0x0, 0x1C, 0x0, 0x0B, 0x0, 0x1C, 0x0, 0x16, - 0x0, 0x1C, 0x0, 0x0B, 0x0, 0x1C, 0x0, 0x17, 0x0, 0x1C, 0x0, 0x0B, 0x0, 0x1C, - 0x0, 0x18, 0x0, 0x1C, 0x0, 0x0B, 0x0, 0x1C, 0x0, 0x19, 0x0, 0x1C, 0x0, 0x0B, - 0x0, 0x1C, 0x0, 0x1A, 0x0, 0x1C, 0x0, 0x0B, 0x0, 0x1C, 0x0, 0x1B, 0x0, 0x1C, - 0x0, 0x0B, 0x0, 0x1C, 0x0, 0x1C, 0x0, 0x1C, 0x0, 0x0B, 0x0, 0x1C, 0x0, 0x1D, - 0x0, 0x1C, 0x0, 0x0B, 0x0, 0x1C, 0x0, 0x1E, 0x0, 0x1C, 0x0, 0x0B, 0x0, 0x1C, - 0x0, 0x1F, 0x0, 0x1C, 0x0, 0x0B, 0x0, 0x1C, 0x0, 0x20, 0x0, 0x1C, 0x0, 0x0B, - 0x0, 0x1C, 0x0, 0x21, 0x0, 0x1C, 0x0, 0x0B, 0x0, 0x1C, 0x0, 0x22, 0x0, 0x1C, - 0x0, 0x0B, 0x0, 0x1C, 0x0, 0x23, 0x0, 0x1C, 0x0, 0x0B, 0x0, 0x1C, 0x0, 0x24, - 0x0, 0xFF, 0xFF -}; - -const byte ALLENDIE[] = { - 0x2, 0xFF, 0xFF, 0x49, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, - 0x0, 0x0, 0x0, 0x0, 0xFF, 0xFF, 0xFF, 0x0, 0x0, 0x49, 0x0, 0x0, 0x0, 0x49, - 0x0, 0x4, 0x0, 0x62, 0x0, 0x1F, 0x0, 0x49, 0x0, 0x5, 0x0, 0x62, 0x0, 0x3A, - 0x0, 0x49, 0x0, 0x6, 0x0, 0x49, 0x0, 0x7, 0x0, 0xFF, 0xFF -}; - -const byte OVERBOARD[] = { - 0x2, 0xFF, 0xFF, 0x22, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, - 0x0, 0x0, 0x0, 0x0, 0x22, 0x22, 0x0, 0x2, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0x22, 0x0, 0x0, 0x0, 0x22, 0x0, 0x3, 0x0, 0x22, 0x0, 0x6, 0x0, 0x22, - 0x0, 0x4, 0x0, 0x22, 0x0, 0x7, 0x0, 0x22, 0x0, 0x5, 0x0, 0x62, 0x0, 0x1D, 0x0, - 0x22, 0x0, 0x5, 0x0, 0x62, 0x0, 0x24, 0x0, 0xFF, 0xFF -}; - -const byte PILOT2[] = { - 0x0, 0x12, 0x0, 0xFF, 0xFF, 0x0, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, - 0x0, 0x0, 0x0, 0x0, 0x46, 0x46, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0x46, 0x0, 0x0, 0x0, 0x46, 0x0, 0x2, 0x0, 0x46, 0x0, 0x0A, 0x0, 0x46, - 0x0, 0x3, 0x0, 0x46, 0x0, 0x0B, 0x0, 0x46, 0x0, 0x4, 0x0, 0x46, 0x0, 0x0C, - 0x0, 0x46, 0x0, 0x5, 0x0, 0x46, 0x0, 0x0D, 0x0, 0x46, 0x0, 0x6, 0x0, 0x46, - 0x0, 0x0E, 0x0, 0x46, 0x0, 0x7, 0x0, 0x46, 0x0, 0x0F, 0x0, 0x46, 0x0, 0x8, - 0x0, 0x46, 0x0, 0x10, 0x0, 0x46, 0x0, 0x9, 0x0, 0x46, 0x0, 0x11, 0x0, 0x46, - 0x0, 0x9, 0x0, 0x62, 0x0, 0x1F, 0x0, 0xFF, 0xFF -}; - -const byte TIKAGENT[] = { - 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0x0, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, - 0x0, 0x0, 0x0, 0x0, 0x43, 0x43, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0xFF, 0x2, - 0x0, 0x43, 0x0, 0x0, 0x0, 0x43, 0x0, 0x2, 0x0, 0x43, 0x0, 0x12, 0x0, 0x43, - 0x0, 0x3, 0x0, 0x43, 0x0, 0x13, 0x0, 0x43, 0x0, 0x4, 0x0, 0x43, 0x0, 0x14, - 0x0, 0x43, 0x0, 0x5, 0x0, 0x43, 0x0, 0x15, 0x0, 0x43, 0x0, 0x6, 0x0, 0x43, - 0x0, 0x16, 0x0, 0x43, 0x0, 0x7, 0x0, 0x43, 0x0, 0x17, 0x0, 0x43, 0x0, 0x8, - 0x0, 0x43, 0x0, 0x18, 0x0, 0x43, 0x0, 0x9, 0x0, 0x43, 0x0, 0x19, 0x0, 0x43, - 0x0, 0x0A, 0x0, 0x43, 0x0, 0x1A, 0x0, 0x43, 0x0, 0x0B, 0x0, 0x43, 0x0, 0x1B, - 0x0, 0x43, 0x0, 0x0C, 0x0, 0x43, 0x0, 0x1C, 0x0, 0x43, 0x0, 0x0D, 0x0, 0x43, - 0x0, 0x1D, 0x0, 0x43, 0x0, 0x0E, 0x0, 0x43, 0x0, 0x1E, 0x0, 0x43, 0x0, 0x0F, - 0x0, 0x43, 0x0, 0x1F, 0x0, 0x43, 0x0, 0x10, 0x0, 0x43, 0x0, 0x20, 0x0, 0x43, - 0x0, 0x11, 0x0, 0x43, 0x0, 0x21, 0x0, 0xFF, 0xFF -}; - -const byte BARTENDER[] = { - 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0x0, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, - 0x0, 0x0, 0x0, 0x0, 0x44, 0x44, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0xFF, 0x0, - 0x0, 0x44, 0x0, 0x0, 0x0, 0x44, 0x0, 0x2, 0x0, 0x44, 0x0, 0x8, 0x0, 0x44, 0x0, - 0x3, 0x0, 0x44, 0x0, 0x9, 0x0, 0x44, 0x0, 0x4, 0x0, 0x44, 0x0, 0x0A, 0x0, 0x44, - 0x0, 0x5, 0x0, 0x44, 0x0, 0x0B, 0x0, 0x44, 0x0, 0x6, 0x0, 0x44, 0x0, 0x0C, - 0x0, 0x44, 0x0, 0x7, 0x0, 0x44, 0x0, 0x0D, 0x0, 0xFF, 0xFF -}; - -const byte PILOT1[] = { - 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0x0, 0x0, 0x0, 0x0, 0x45, 0x45, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0xFF, 0x0, - 0x0, 0x45, 0x0, 0x0, 0x0, 0x45, 0x0, 0x2, 0x0, 0x45, 0x0, 0x3, 0x0, 0xFF, 0xFF -}; - -const byte COOK[] = { - 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0x0, 0x0, 0x0, 0x0, 0x47, 0x47, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0xFF, - 0x2, 0x0, 0x47, 0x0, 0x0, 0x0, 0x47, 0x0, 0x2, 0x0, 0x47, 0x0, 0x10, 0x0, 0x47, - 0x0, 0x3, 0x0, 0x47, 0x0, 0x11, 0x0, 0x47, 0x0, 0x4, 0x0, 0x47, 0x0, 0x12, - 0x0, 0x47, 0x0, 0x5, 0x0, 0x47, 0x0, 0x13, 0x0, 0x47, 0x0, 0x6, 0x0, 0x47, - 0x0, 0x14, 0x0, 0x47, 0x0, 0x7, 0x0, 0x47, 0x0, 0x15, 0x0, 0x47, 0x0, 0x8, - 0x0, 0x47, 0x0, 0x16, 0x0, 0x47, 0x0, 0x9, 0x0, 0x47, 0x0, 0x17, 0x0, 0x47, - 0x0, 0x0A, 0x0, 0x47, 0x0, 0x18, 0x0, 0x47, 0x0, 0x0B, 0x0, 0x47, 0x0, 0x19, - 0x0, 0x47, 0x0, 0x0C, 0x0, 0x47, 0x0, 0x1A, 0x0, 0x47, 0x0, 0x0D, 0x0, 0x47, - 0x0, 0x1B, 0x0, 0x47, 0x0, 0x0E, 0x0, 0x47, 0x0, 0x1C, 0x0, 0x47, 0x0, 0x0F, - 0x0, 0x47, 0x0, 0x1D, 0x0, 0xFF, 0xFF -}; - -const byte BEXPLODE[] = { - 0x2, 0xFF, 0xFF, 0x28, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, - 0x0, 0x0, 0x0, 0x0, 0x28, 0x28, 0x0, 0x2, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0x28, 0x0, 0x0, 0x0, 0x28, 0x0, 0x3, 0x0, 0x28, 0x0, 0x9, 0x0, 0x28, - 0x0, 0x4, 0x0, 0x28, 0x0, 0x0A, 0x0, 0x28, 0x0, 0x5, 0x0, 0x28, 0x0, 0x0B, - 0x0, 0x28, 0x0, 0x6, 0x0, 0x62, 0x0, 0x23, 0x0, 0x28, 0x0, 0x7, 0x0, 0x62, - 0x0, 0x23, 0x0, 0x28, 0x0, 0x8, 0x0, 0x62, 0x0, 0x23, 0x0, 0xFF, 0xFF -}; - -const byte THORNICK[] = { - 0x2, 0x7, 0x0, 0x7, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0x0, 0x0, 0x0, - 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7, 0x0, 0x0, 0x0, 0x7, 0x0, 0x2, 0x0, - 0x7, 0x0, 0x5, 0x0, 0x7, 0x0, 0x3, 0x0, 0x7, 0x0, 0x6, 0x0, 0x7, 0x0, 0x3, - 0x0, 0x7, 0x0, 0x7, 0x0, 0x7, 0x0, 0x4, 0x0, 0x7, 0x0, 0x8, 0x0, 0xFF, 0xFF -}; - -const byte MAYA[] = { - 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0, - 0x0, 0x0, 0x0, 0x48, 0x48, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0xFF, 0x2, 0x0, - 0x48, 0x0, 0x0, 0x0, 0x48, 0x0, 0x2, 0x0, 0x48, 0x0, 0x13, 0x0, 0x48, - 0x0, 0x3, 0x0, 0x48, 0x0, 0x14, 0x0, 0x48, 0x0, 0x4, 0x0, 0x48, 0x0, 0x15, - 0x0, 0x48, 0x0, 0x5, 0x0, 0x48, 0x0, 0x16, 0x0, 0x48, 0x0, 0x6, 0x0, 0x48, - 0x0, 0x17, 0x0, 0x48, 0x0, 0x7, 0x0, 0x48, 0x0, 0x18, 0x0, 0x48, 0x0, 0x8, - 0x0, 0x48, 0x0, 0x19, 0x0, 0x48, 0x0, 0x9, 0x0, 0x48, 0x0, 0x1A, 0x0, 0x48, - 0x0, 0x0A, 0x0, 0x48, 0x0, 0x1B, 0x0, 0x48, 0x0, 0x0B, 0x0, 0x48, 0x0, 0x1C, - 0x0, 0x48, 0x0, 0x0C, 0x0, 0x48, 0x0, 0x1D, 0x0, 0x48, 0x0, 0x0D, 0x0, 0x48, - 0x0, 0x1E, 0x0, 0x48, 0x0, 0x0E, 0x0, 0x48, 0x0, 0x1F, 0x0, 0x48, 0x0, 0x0F, - 0x0, 0x48, 0x0, 0x20, 0x0, 0x48, 0x0, 0x10, 0x0, 0x48, 0x0, 0x21, 0x0, 0x48, - 0x0, 0x11, 0x0, 0x48, 0x0, 0x22, 0x0, 0x48, 0x0, 0x12, 0x0, 0x48, 0x0, 0x23, - 0x0, 0xFF, 0xFF -}; - -const byte CAPTAIN[] = { - 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0x0, 0x0, 0x0, 0x0, 0x4A, 0x4A, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0xFF, - 0x2, 0x0, 0x4A, 0x0, 0x0, 0x0, 0x4A, 0x0, 0x2, 0x0, 0x4A, 0x0, 0x0E, 0x0, 0x4A, - 0x0, 0x3, 0x0, 0x4A, 0x0, 0x0F, 0x0, 0x4A, 0x0, 0x4, 0x0, 0x4A, 0x0, 0x10, - 0x0, 0x4A, 0x0, 0x5, 0x0, 0x4A, 0x0, 0x11, 0x0, 0x4A, 0x0, 0x6, 0x0, 0x4A, - 0x0, 0x12, 0x0, 0x4A, 0x0, 0x7, 0x0, 0x4A, 0x0, 0x13, 0x0, 0x4A, 0x0, 0x8, - 0x0, 0x4A, 0x0, 0x14, 0x0, 0x4A, 0x0, 0x9, 0x0, 0x4A, 0x0, 0x15, 0x0, 0x4A, - 0x0, 0x0A, 0x0, 0x4A, 0x0, 0x16, 0x0, 0x4A, 0x0, 0x0B, 0x0, 0x4A, 0x0, 0x17, - 0x0, 0x4A, 0x0, 0x0C, 0x0, 0x4A, 0x0, 0x18, 0x0, 0x4A, 0x0, 0x0D, 0x0, 0x4A, - 0x0, 0x19, 0x0, 0xFF, 0xFF -}; - -const byte ALLEN[] = { - 0x3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0x0, 0x0, 0x0, 0x0, 0x1E, 0x4C, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0x4C, 0x0, 0x0, 0x0, 0x4C, 0x0, 0x2, 0x0, 0x4C, 0x0, 0x3, 0x0, - 0xFF, 0xFF -}; - -const byte ARCH[] = { - 0x1, 0x2B, 0x0, 0x4B, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0x0, - 0x0, 0x0, 0x0, 0x2B, 0x4B, 0x0, 0x40, 0x0, 0xFF, 0x4B, 0x0, 0x41, 0x0, - 0x4B, 0x0, 0x0, 0x0, 0x4B, 0x0, 0x2, 0x0, 0x4B, 0x0, 0x4, 0x0, 0x4B, 0x0, 0x3, - 0x0, 0x4B, 0x0, 0x5, 0x0, 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x6, 0x0, 0x4B, 0x0, - 0x3, 0x0, 0x4B, 0x0, 0x7, 0x0, 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x8, 0x0, 0x4B, - 0x0, 0x3, 0x0, 0x4B, 0x0, 0x9, 0x0, 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x0A, 0x0, - 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x0B, 0x0, 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, - 0x0C, 0x0, 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x0D, 0x0, 0x4B, 0x0, 0x3, 0x0, - 0x4B, 0x0, 0x0E, 0x0, 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x0F, 0x0, 0x4B, 0x0, - 0x3, 0x0, 0x4B, 0x0, 0x10, 0x0, 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x11, 0x0, - 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x12, 0x0, 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, - 0x13, 0x0, 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x14, 0x0, 0x4B, 0x0, 0x3, 0x0, - 0x4B, 0x0, 0x15, 0x0, 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x16, 0x0, 0x4B, 0x0, - 0x3, 0x0, 0x4B, 0x0, 0x17, 0x0, 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x18, 0x0, - 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x19, 0x0, 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, - 0x1A, 0x0, 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x1B, 0x0, 0x4B, 0x0, 0x3, 0x0, - 0x4B, 0x0, 0x1C, 0x0, 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x1D, 0x0, 0x4B, 0x0, - 0x3, 0x0, 0x4B, 0x0, 0x1E, 0x0, 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x1F, 0x0, - 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x20, 0x0, 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, - 0x21, 0x0, 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x22, 0x0, 0x4B, 0x0, 0x3, 0x0, - 0x4B, 0x0, 0x23, 0x0, 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x24, 0x0, 0x4B, 0x0, - 0x3, 0x0, 0x4B, 0x0, 0x25, 0x0, 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x26, 0x0, - 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x27, 0x0, 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, - 0x28, 0x0, 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x29, 0x0, 0x4B, 0x0, 0x3, 0x0, - 0x4B, 0x0, 0x2A, 0x0, 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x2B, 0x0, 0x4B, 0x0, - 0x3, 0x0, 0x4B, 0x0, 0x2C, 0x0, 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x2D, 0x0, - 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x2E, 0x0, 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, - 0x2F, 0x0, 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x30, 0x0, 0x4B, 0x0, 0x3, 0x0, - 0x4B, 0x0, 0x31, 0x0, 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x32, 0x0, 0x4B, 0x0, - 0x3, 0x0, 0x4B, 0x0, 0x33, 0x0, 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x34, 0x0, - 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x35, 0x0, 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, - 0x36, 0x0, 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x37, 0x0, 0x4B, 0x0, 0x3, 0x0, - 0x4B, 0x0, 0x38, 0x0, 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x39, 0x0, 0x4B, 0x0, - 0x3, 0x0, 0x4B, 0x0, 0x3A, 0x0, 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x3B, 0x0, - 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x3C, 0x0, 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, - 0x3D, 0x0, 0x4B, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x3E, 0x0, 0x4B, 0x0, 0x3, 0x0, - 0x4B, 0x0, 0x3F, 0x0, 0xFF, 0xFF -}; - -const byte GUARD1[] = { - 0x3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0x0, 0x0, 0x0, 0x0, 0x4D, 0x4D, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0x4D, 0x0, 0x0, 0x0, 0x4D, 0x0, 0x2, 0x0, 0x4D, 0x0, 0x3, 0x0, - 0xFF, 0xFF -}; - -const byte MCANOE[] = { - 0x3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0x0, 0x0, 0x0, 0x0, 0x4E, 0x4E, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0x4E, 0x0, 0x0, 0x0, 0x4E, 0x0, 0x2, 0x0, 0x4E, 0x0, 0x3, 0x0, - 0xFF, 0xFF -}; - -const byte CAMPFIRE[] = { - 0x2, 0x35, 0x0, 0x35, 0x0, 0x3, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0x0, - 0x0, 0x0, 0x0, 0x35, 0x35, 0x0, 0x1, 0x0, 0xFF, 0x35, 0x0, 0x2, 0x0, 0x35, - 0x0, 0x0, 0x0, 0x35, 0x0, 0x4, 0x0, 0x35, 0x0, 0x18, 0x0, 0x35, 0x0, 0x5, 0x0, - 0x35, 0x0, 0x19, 0x0, 0x35, 0x0, 0x6, 0x0, 0x35, 0x0, 0x1A, 0x0, 0x35, 0x0, - 0x7, 0x0, 0x35, 0x0, 0x1B, 0x0, 0x35, 0x0, 0x8, 0x0, 0x35, 0x0, 0x1C, 0x0, - 0x35, 0x0, 0x9, 0x0, 0x35, 0x0, 0x1D, 0x0, 0x35, 0x0, 0x0A, 0x0, 0x35, 0x0, - 0x1E, 0x0, 0x35, 0x0, 0x0B, 0x0, 0x35, 0x0, 0x1F, 0x0, 0x35, 0x0, 0x0C, - 0x0, 0x35, 0x0, 0x20, 0x0, 0x35, 0x0, 0x0D, 0x0, 0x35, 0x0, 0x21, 0x0, 0x35, - 0x0, 0x0E, 0x0, 0x35, 0x0, 0x22, 0x0, 0x35, 0x0, 0x0F, 0x0, 0x35, 0x0, 0x23, - 0x0, 0x35, 0x0, 0x10, 0x0, 0x35, 0x0, 0x24, 0x0, 0x35, 0x0, 0x11, 0x0, 0x35, - 0x0, 0x25, 0x0, 0x35, 0x0, 0x12, 0x0, 0x35, 0x0, 0x26, 0x0, 0x35, 0x0, 0x13, - 0x0, 0x35, 0x0, 0x27, 0x0, 0x35, 0x0, 0x14, 0x0, 0x35, 0x0, 0x28, 0x0, 0x35, - 0x0, 0x15, 0x0, 0x35, 0x0, 0x29, 0x0, 0x35, 0x0, 0x16, 0x0, 0x35, 0x0, 0x2A, - 0x0, 0x35, 0x0, 0x17, 0x0, 0x35, 0x0, 0x2B, 0x0, 0xFF, 0xFF -}; - -const byte COLONEL[] = { - 0x2, 0xFF, 0xFF, 0x0E, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, - 0x0, 0x0, 0x0, 0x0, 0x0E, 0x0E, 0x0, 0x5, 0x0, 0xFF, 0xFF, 0xFF, 0x2, - 0x0, 0x4F, 0x0, 0x0, 0x0, 0x4F, 0x0, 0x1, 0x0, 0x4F, 0x0, 0x2, 0x0, 0x0E, 0x0, - 0x8, 0x0, 0x4F, 0x0, 0x3, 0x0, 0xFF, 0xFF -}; - -const byte SOLDIERS[] = { - 0x2, 0xFF, 0xFF, 0x50, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, - 0x0, 0x0, 0x0, 0x0, 0xFF, 0xFF, 0xFF, 0x0, 0x0, 0x50, 0x0, 0x0, 0x0, 0x50, - 0x0, 0x2, 0x0, 0x50, 0x0, 0x0, 0x0, 0xFF, 0xFF -}; - -const byte JWATER[] = { - 0x2, 0xFF, 0xFF, 0x51, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, - 0x0, 0x0, 0x0, 0x0, 0xFF, 0xFF, 0xFF, 0x0, 0x0, 0x51, 0x0, 0x0, 0x0, 0x51, - 0x0, 0x2, 0x0, 0x51, 0x0, 0x3, 0x0, 0xFF, 0xFF -}; - -const byte SHOOT[] = { - 0x2, 0xFF, 0xFF, 0x52, 0x0, 0x2, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, - 0x0, 0x0, 0x0, 0x0, 0x38, 0x52, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0xFF, 0x0, - 0x0, 0x52, 0x0, 0x0, 0x0, 0x52, 0x0, 0x3, 0x0, 0x52, 0x0, 0x5, 0x0, 0x52, - 0x0, 0x4, 0x0, 0x62, 0x0, 0x1F, 0x0, 0xFF, 0xFF -}; - -const byte ADIE[] = { - 0x2, 0xFF, 0xFF, 0x53, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, - 0x0, 0x0, 0x0, 0x0, 0xFF, 0xFF, 0xFF, 0x2, 0x0, 0x53, 0x0, 0x0, 0x0, 0x53, - 0x0, 0x2, 0x0, 0x62, 0x0, 0x4, 0x0, 0x53, 0x0, 0x3, 0x0, 0x62, 0x0, 0x4, - 0x0, 0x53, 0x0, 0x4, 0x0, 0x62, 0x0, 0x4, 0x0, 0xFF, 0xFF -}; - -const byte DYNAMITE[] = { - 0x2, 0xFF, 0xFF, 0x54, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, - 0x0, 0x0, 0x0, 0x0, 0xFF, 0xFF, 0xFF, 0x2, 0x0, 0x54, 0x0, 0x0, 0x0, 0x54, - 0x0, 0x2, 0x0, 0x62, 0x0, 0x23, 0x0, 0xFF, 0xFF -}; - -const byte MAYASHOT[] = { - 0x3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0x0, 0x0, 0x0, 0x0, 0x36, 0x55, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0xFF, - 0x3, 0x0, 0x55, 0x0, 0x0, 0x0, 0x55, 0x0, 0x2, 0x0, 0x62, 0x0, 0x1F, - 0x0, 0xFF, 0xFF -}; - -const byte OFFKEV[] = { - 0x3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0, - 0x0, 0x0, 0x0, 0x4D, 0x29, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x29, 0x0, 0x0, 0x0, 0x29, 0x0, 0x2, 0x0, 0x29, 0x0, 0x3, 0x0, 0xFF, 0xFF -}; - -const byte VALLEY[] = { - 0x2, 0x3A, 0x0, 0x3A, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0x0, - 0x0, 0x0, 0x0, 0x3A, 0x3A, 0x0, 0x2, 0x0, 0xFF, 0xFF, 0xFF, 0x3, 0x0, - 0x3A, 0x0, 0x0, 0x0, 0x3A, 0x0, 0x3, 0x0, 0x3A, 0x0, 0x5, 0x0, 0x3A, 0x0, - 0x4, 0x0, 0x62, 0x0, 0x27, 0x0, 0xFF, 0xFF -}; - -const byte MEANWHILE1[] = { - 0x2, 0xFF, 0xFF, 0x0E, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, - 0x0, 0x0, 0x0, 0x0, 0x0E, 0x0E, 0x0, 0x5, 0x0, 0xFF, 0xFF, 0xFF, 0x3, - 0x0, 0x0E, 0x0, 0x0, 0x0, 0x0E, 0x0, 0x6, 0x0, 0x0E, 0x0, 0x0A, 0x0, 0x0E, - 0x0, 0x7, 0x0, 0x0E, 0x0, 0x0B, 0x0, 0x0E, 0x0, 0x8, 0x0, 0x0E, 0x0, 0x0C, - 0x0, 0x0E, 0x0, 0x8, 0x0, 0x0E, 0x0, 0x0D, 0x0, 0x0E, 0x0, 0x8, 0x0, 0x0E, - 0x0, 0x0E, 0x0, 0x0E, 0x0, 0x9, 0x0, 0x0E, 0x0, 0x0F, 0x0, 0x0E, 0x0, 0x9, - 0x0, 0x0E, 0x0, 0x10, 0x0, 0x0E, 0x0, 0x9, 0x0, 0x0E, 0x0, 0x11, 0x0, 0x0E, - 0x0, 0x9, 0x0, 0x0E, 0x0, 0x12, 0x0, 0x0E, 0x0, 0x9, 0x0, 0x62, 0x0, 0x1A, - 0x0, 0xFF, 0xFF -}; - -const byte MAYATREE[] = { - 0x3, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, - 0x0, 0x0, 0x0, 0x0, 0x30, 0x56, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0xFF, 0x0, - 0x0, 0x56, 0x0, 0x0, 0x0, 0x56, 0x0, 0x2, 0x0, 0x56, 0x0, 0x3, 0x0, 0xFF, 0xFF -}; - -const byte LOCO[] = { - 0x3, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, - 0x0, 0x0, 0x0, 0x0, 0x31, 0x57, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0xFF, 0x0, - 0x0, 0x57, 0x0, 0x0, 0x0, 0x57, 0x0, 0x2, 0x0, 0x57, 0x0, 0x3, 0x0, 0xFF, 0xFF -}; - -const byte KISS[] = { - 0x2, 0xFF, 0xFF, 0x3A, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, - 0x0, 0x0, 0x0, 0x0, 0x40, 0x40, 0x0, 0x5, 0x0, 0xFF, 0xFF, 0xFF, 0x0, - 0x0, 0x40, 0x0, 0x0, 0x0, 0x40, 0x0, 0x6, 0x0, 0x40, 0x0, 0x26, 0x0, 0x40, - 0x0, 0x7, 0x0, 0x40, 0x0, 0x27, 0x0, 0x40, 0x0, 0x8, 0x0, 0x40, 0x0, 0x28, - 0x0, 0x40, 0x0, 0x9, 0x0, 0x62, 0x0, 0x4E, 0x0, 0x40, 0x0, 0x0A, 0x0, 0x40, - 0x0, 0x29, 0x0, 0x40, 0x0, 0x0B, 0x0, 0x40, 0x0, 0x2A, 0x0, 0x40, 0x0, 0x0C, - 0x0, 0x40, 0x0, 0x2B, 0x0, 0x40, 0x0, 0x0D, 0x0, 0x40, 0x0, 0x2C, 0x0, 0x40, - 0x0, 0x0E, 0x0, 0x40, 0x0, 0x2D, 0x0, 0x40, 0x0, 0x0F, 0x0, 0x40, 0x0, 0x2E, - 0x0, 0x40, 0x0, 0x10, 0x0, 0x40, 0x0, 0x2F, 0x0, 0x40, 0x0, 0x11, 0x0, 0x40, - 0x0, 0x30, 0x0, 0x40, 0x0, 0x12, 0x0, 0x40, 0x0, 0x31, 0x0, 0x40, 0x0, 0x13, - 0x0, 0x40, 0x0, 0x32, 0x0, 0x40, 0x0, 0x14, 0x0, 0x40, 0x0, 0x33, 0x0, 0x40, - 0x0, 0x15, 0x0, 0x40, 0x0, 0x34, 0x0, 0x40, 0x0, 0x16, 0x0, 0x40, 0x0, 0x35, - 0x0, 0x40, 0x0, 0x17, 0x0, 0x40, 0x0, 0x36, 0x0, 0x40, 0x0, 0x18, 0x0, 0x40, - 0x0, 0x37, 0x0, 0x40, 0x0, 0x19, 0x0, 0x40, 0x0, 0x38, 0x0, 0x40, 0x0, 0x1A, - 0x0, 0x40, 0x0, 0x39, 0x0, 0x40, 0x0, 0x1B, 0x0, 0x40, 0x0, 0x3A, 0x0, 0x40, - 0x0, 0x1C, 0x0, 0x40, 0x0, 0x3B, 0x0, 0x40, 0x0, 0x1D, 0x0, 0x40, 0x0, 0x3C, - 0x0, 0x40, 0x0, 0x1E, 0x0, 0x40, 0x0, 0x3D, 0x0, 0x40, 0x0, 0x1F, 0x0, 0x40, - 0x0, 0x3E, 0x0, 0x40, 0x0, 0x20, 0x0, 0x40, 0x0, 0x3F, 0x0, 0x40, 0x0, 0x21, - 0x0, 0x40, 0x0, 0x40, 0x0, 0x40, 0x0, 0x22, 0x0, 0x40, 0x0, 0x41, 0x0, 0x40, - 0x0, 0x23, 0x0, 0x40, 0x0, 0x42, 0x0, 0x40, 0x0, 0x24, 0x0, 0x40, 0x0, 0x43, - 0x0, 0x40, 0x0, 0x25, 0x0, 0x40, 0x0, 0x44, 0x0, 0x40, 0x0, 0x25, 0x0, 0x40, - 0x0, 0x45, 0x0, 0x40, 0x0, 0x25, 0x0, 0x40, 0x0, 0x46, 0x0, 0x40, 0x0, 0x25, - 0x0, 0x40, 0x0, 0x47, 0x0, 0xFF, 0xFF -}; - -const byte ROBOT[] = { - 0x3, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, - 0x0, 0x0, 0x0, 0x0, 0x9, 0x58, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0xFF, 0x0, 0x0, - 0x58, 0x0, 0x0, 0x0, 0x58, 0x0, 0x0, 0x0, 0x58, 0x0, 0x2, 0x0, 0xFF, 0xFF -}; - -const byte ANTKILL[] = { - 0x3, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0x0, 0x0, - 0x0, 0x0, 0x3C, 0x59, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0xFF, 0x0, 0x0, 0x59, - 0x0, 0x0, 0x0, 0x59, 0x0, 0x2, 0x0, 0x62, 0x0, 0x0E, 0x0, 0xFF, 0xFF -}; - -const byte LOCOHOT[] = { - 0x3, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0x0, 0x0, - 0x0, 0x0, 0x19, 0x5A, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0xFF, 0x0, 0x0, 0x5A, - 0x0, 0x0, 0x0, 0x5A, 0x0, 0x2, 0x0, 0x62, 0x0, 0x3C, 0x0, 0xFF, 0xFF -}; - -const byte CRACK[] = { - 0x2, 0x38, 0x0, 0x38, 0x0, 0x1, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0x0, - 0x0, 0x0, 0x0, 0xFF, 0xFF, 0xFF, 0x0, 0x0, 0x38, 0x0, 0x0, 0x0, 0x38, - 0x0, 0x0, 0x0, 0x38, 0x0, 0x2, 0x0, 0xFF, 0xFF -}; - -const byte LETTER[] = { - 0x3, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, - 0x0, 0x0, 0x0, 0x0, 0xFF, 0xFF, 0xFF, 0x0, 0x0, 0x30, 0x0, 0x0, 0x0, 0x30, - 0x0, 0x0, 0x0, 0x30, 0x0, 0x1, 0x0, 0x30, 0x0, 0x0, 0x0, 0x30, 0x0, 0x6, 0x0, 0x30, - 0x0, 0x0, 0x0, 0x30, 0x0, 0x7, 0x0, 0x30, 0x0, 0x0, 0x0, 0x30, 0x0, 0x8, 0x0, 0x30, - 0x0, 0x0, 0x0, 0x30, 0x0, 0x9, 0x0, 0x30, 0x0, 0x0, 0x0, 0x30, 0x0, 0x0A, 0x0, - 0x30, 0x0, 0x0, 0x0, 0x30, 0x0, 0x0B, 0x0, 0x30, 0x0, 0x0, 0x0, 0x30, 0x0, - 0x0C, 0x0, 0x30, 0x0, 0x0, 0x0, 0x30, 0x0, 0x0D, 0x0, 0x30, 0x0, 0x0, 0x0, - 0x30, 0x0, 0x0E, 0x0, 0x30, 0x0, 0x0, 0x0, 0x30, 0x0, 0x0F, 0x0, 0x30, 0x0, - 0x0, 0x0, 0x30, 0x0, 0x10, 0x0, 0x30, 0x0, 0x0, 0x0, 0x30, 0x0, 0x2, 0x0, 0x30, - 0x0, 0x0, 0x0, 0x30, 0x0, 0x3, 0x0, 0x30, 0x0, 0x0, 0x0, 0x30, 0x0, 0x4, 0x0, 0x30, - 0x0, 0x0, 0x0, 0x30, 0x0, 0x5, 0x0, 0xFF, 0xFF -}; - -const byte OVERBOARD_DEMO[] = { - 0x02, 0xFF, 0xFF, 0x22, 0x00, 0x01, 0x00, 0xFF, 0xFF, 0xFF, - 0xFF, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x00, 0x02, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x22, 0x00, 0x00, 0x00, 0x22, - 0x00, 0x03, 0x00, 0x22, 0x00, 0x06, 0x00, 0x22, 0x00, 0x04, - 0x00, 0x22, 0x00, 0x07, 0x00, 0x22, 0x00, 0x05, 0x00, 0x62, - 0x00, 0x1D, 0x00, 0x60, 0x00, 0x00, 0x00, 0x22, 0x00, 0x06, - 0x00, 0x60, 0x00, 0x01, 0x00, 0x22, 0x00, 0x07, 0x00, 0xFF, - 0xFF -}; - -const byte SHORE1[] = { - 0x02, 0xFF, 0xFF, 0x55, 0x00, 0x01, 0x00, 0xFF, 0xFF, 0xFF, - 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x03, 0x00, - 0x55, 0x00, 0x00, 0x00, 0x55, 0x00, 0x02, 0x00, 0x62, 0x00, - 0x2E, 0x00, 0x55, 0x00, 0x02, 0x00, 0x62, 0x00, 0x2F, 0x00, - 0xFF, 0xFF -}; - -const byte CHAP8[] = { - 0x02, 0xFF, 0xFF, 0x60, 0x00, 0x03, 0x00, 0xFF, 0xFF, 0xFF, - 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x60, 0x00, 0x02, 0x00, 0xFF, 0xFF -}; - -const byte *const CHARTBL[] = { - ELAINE, LIB, FLASHBACK, ALLENDIE, OVERBOARD, PILOT2, TIKAGENT, - BARTENDER, PILOT1, COOK, BEXPLODE, THORNICK, MAYA, CAPTAIN, - ALLEN, ARCH, GUARD1, MCANOE, CAMPFIRE, COLONEL, SOLDIERS, - JWATER, SHOOT, ADIE, DYNAMITE, MAYASHOT, OFFKEV, VALLEY, - MEANWHILE1, MAYATREE, LOCO, KISS, ROBOT, ANTKILL, LOCOHOT, - CRACK, LETTER -}; - -const byte *const CHARTBL_DEMO[] = { - ELAINE, LIB, FLASHBACK, ALLENDIE, OVERBOARD_DEMO, PILOT2, TIKAGENT, - BARTENDER, PILOT1, COOK, BEXPLODE, THORNICK, MAYA, CAPTAIN, - ALLEN, ARCH, GUARD1, MCANOE, CAMPFIRE, COLONEL, SOLDIERS, - JWATER, SHOOT, ADIE, DYNAMITE, SHORE1, CHAP8 -}; - -const char *const INVENTORY_NAMES[] = { - "RAT", "ALCOHOL", "SAFE COMBINATION", "BEAKER", "MICROFILM", - "VAULT KEY", "BOLT CUTTERS", "BLOWGUN", "LOVE POTION", "MONEY", - "DARTS", "TAPE", "JUNGLE POTION", "MOVIE", "CABINET KEY", - "DISPLAY CASE KEY", "FLITCH'S CAR KEYS", "COAT HANGER", - "CROWBAR", "COMPASS", "MAP", "LETTER OPENER", "LETTER", - "DECODER", "DIPPED DART", "LOADED BLOWGUN", "CARD", "JERRYCAN", - "CIGARETTES", "BIKE PUMP", "PARACHUTE", "PESO", "PEPPERS", - "MACHETE", "POISON ROOT", "AMMUNITION", "PADDLE", "FISHING NET", - "RAT TRAP", "CHEESE", "LOADED TRAP", "KNIFE", "CHOPPED PEPPERS", - "LIGHTER", "LADDER", "SMALL POLE", "JEEP KEY", "CHAIN", "ARROW", - "FILLED JERRY CAN", "EXPLOSIVES", "GEIGER COUNTER", "VINE", - "GOLD NUGGET", "HOLLOW REED", "AMAZON QUEEN KEYS", "FISHING POLE", - "HARPOON", "RAG", "BOTTLE OF RUM", "RAG IN BOTTLE", "MOLOTOV COCKTAIL", - "JUNGLE PLANT", "LADLE", "WORM", "FISH", "FIREWORKS", "BAITED POLE", - "FILLED LADLE", "EMERALD", "SMALL KEY", "SCROLL", "LIT EXPLOSIVES", - "LIGHTER", "BROKEN SPEAR", "SHOE LACES", "TORCH", "LACES AND SPEAR", - "KNIFE SPEAR", "GARBAGE CAN", "RAFT", "INFLATED RAFT", - "JASON'S CAR KEYS", "PESO BILLS", "PLANK" -}; - -const int FONT2_INDEX[] = { - 62, 2, 6, - 0x0000, 0x0019, 0x0021, 0x002e, 0x0041, 0x005a, 0x0073, 0x008c, 0x0093, 0x009b, - 0x00a3, 0x00bc, 0x00d5, 0x00dd, 0x00ea, 0x00f1, 0x00fe, 0x010b, 0x0118, 0x0125, - 0x0132, 0x013f, 0x014c, 0x0159, 0x0166, 0x0173, 0x0180, 0x0187, 0x018e, 0x01a7, - 0x01b4, 0x01cd, 0x01dc, 0x01f5, 0x0208, 0x0215, 0x0222, 0x022f, 0x023c, 0x0249, - 0x025c, 0x0269, 0x0276, 0x0285, 0x0292, 0x029f, 0x02b2, 0x02c5, 0x02d2, 0x02df, - 0x02ee, 0x02fb, 0x0308, 0x0315, 0x0322, 0x032f, 0x0342, 0x034f, 0x0362, 0x036f, - 0x0388, 0x03a1, -}; - -const byte FONT2_DATA[] = { - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0xf0, 0xf0, 0xf0, - 0x00, 0xf0, 0x00, 0x06, 0xf3, 0xc0, 0xc3, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x07, 0x1c, 0x00, - 0x67, 0x9e, 0xc0, 0x07, 0x1c, 0x00, 0x67, 0x9e, 0xc0, 0x07, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0xc0, 0x00, 0x3f, - 0xfc, 0x00, 0xb2, 0xc0, 0x00, 0x3f, 0xfc, 0x00, 0x02, 0xcb, - 0x00, 0x3f, 0xfc, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x18, 0x60, - 0x70, 0x70, 0x60, 0x1c, 0x00, 0x04, 0x60, 0x18, 0x1c, 0x1c, - 0x1c, 0x70, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x30, - 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xc0, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf0, 0xf0, - 0x00, 0x07, 0x00, 0xf0, 0x03, 0xc0, 0x0f, 0x00, 0x3c, 0x00, - 0xf0, 0x00, 0x00, 0x00, 0x07, 0x3f, 0xc0, 0x70, 0x70, 0x70, - 0x70, 0x70, 0x70, 0x3f, 0xc0, 0x00, 0x00, 0x07, 0x1f, 0x00, - 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0xff, 0xf0, 0x00, 0x00, - 0x08, 0x2b, 0xf0, 0xb0, 0x2c, 0x00, 0xa0, 0x0a, 0x00, 0xff, - 0xfc, 0x00, 0x00, 0x07, 0xff, 0xc0, 0x00, 0x70, 0x03, 0xc0, - 0x00, 0x70, 0xff, 0xc0, 0x00, 0x00, 0x07, 0x0b, 0xc0, 0x2d, - 0xc0, 0xb1, 0xc0, 0xaa, 0xa0, 0x01, 0xc0, 0x00, 0x00, 0x07, - 0xff, 0xf0, 0x70, 0x00, 0x7f, 0xc0, 0x00, 0xb0, 0xbf, 0xc0, - 0x00, 0x00, 0x07, 0x2f, 0xc0, 0x70, 0x00, 0x7f, 0xc0, 0x70, - 0x70, 0x3f, 0xc0, 0x00, 0x00, 0x08, 0xff, 0xfc, 0x00, 0xb0, - 0x02, 0xc0, 0x02, 0xc0, 0x0b, 0x00, 0x00, 0x00, 0x08, 0x2f, - 0xf0, 0xb0, 0x1c, 0x2f, 0xf0, 0xb0, 0x1c, 0x2f, 0xf0, 0x00, - 0x00, 0x07, 0x3f, 0xc0, 0x70, 0x70, 0x3f, 0xf0, 0x00, 0x70, - 0x3f, 0xc0, 0x00, 0x00, 0x03, 0xf0, 0xf0, 0x00, 0xf0, 0xf0, - 0x00, 0x03, 0xf0, 0xf0, 0x00, 0xf0, 0x30, 0x00, 0x09, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0xff, 0xc0, 0x00, 0x00, - 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x06, 0xff, 0x00, 0x03, 0xc0, 0x0f, 0x00, 0x3c, 0x00, - 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0a, 0x00, 0x40, 0x00, 0x01, 0xf0, 0x00, 0x07, 0x1c, - 0x00, 0x1f, 0xff, 0x00, 0x70, 0x01, 0xc0, 0x00, 0x00, 0x00, - 0x08, 0x7f, 0xf0, 0x70, 0x1c, 0x7f, 0xf0, 0x70, 0x1c, 0x6a, - 0xb0, 0x00, 0x00, 0x08, 0x2f, 0xfc, 0x70, 0x00, 0x70, 0x00, - 0x70, 0x00, 0x2a, 0xa8, 0x00, 0x00, 0x08, 0x7f, 0xf0, 0x70, - 0x1c, 0x70, 0x1c, 0x70, 0x1c, 0x6a, 0xb0, 0x00, 0x00, 0x07, - 0x7f, 0xf0, 0x70, 0x00, 0x7f, 0xc0, 0x70, 0x00, 0x6a, 0xa0, - 0x00, 0x00, 0x07, 0x7f, 0xf0, 0x70, 0x00, 0x7f, 0xc0, 0x70, - 0x00, 0x60, 0x00, 0x00, 0x00, 0x09, 0x3f, 0xfc, 0x00, 0x70, - 0x00, 0x00, 0x70, 0xff, 0x00, 0x70, 0x1c, 0x00, 0x2a, 0xbc, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x70, 0x1c, 0x70, 0x1c, 0x7f, - 0xfc, 0x70, 0x1c, 0x70, 0x1c, 0x00, 0x00, 0x07, 0xff, 0xf0, - 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0xaa, 0xa0, 0x00, 0x00, - 0x08, 0x0f, 0xfc, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x70, - 0x70, 0x2a, 0x40, 0x00, 0x00, 0x08, 0x70, 0x2c, 0x72, 0xc0, - 0x7f, 0x00, 0x72, 0xc0, 0x70, 0x28, 0x00, 0x00, 0x07, 0x70, - 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6a, 0xa0, 0x00, - 0x00, 0x0a, 0x70, 0x02, 0xc0, 0x7c, 0x09, 0xc0, 0x77, 0x2d, - 0xc0, 0x71, 0xb1, 0xc0, 0x60, 0xc1, 0x80, 0x00, 0x00, 0x00, - 0x09, 0x70, 0x07, 0x00, 0x77, 0x07, 0x00, 0x71, 0xc7, 0x00, - 0x70, 0x77, 0x00, 0x60, 0x06, 0x00, 0x00, 0x00, 0x00, 0x08, - 0x2f, 0xf0, 0x70, 0x1c, 0x70, 0x1c, 0x70, 0x1c, 0x2a, 0xa0, - 0x00, 0x00, 0x08, 0x7f, 0xf0, 0x70, 0x1c, 0x7f, 0xf0, 0x70, - 0x00, 0x60, 0x00, 0x00, 0x00, 0x08, 0x2f, 0xf0, 0x70, 0x1c, - 0x70, 0x1c, 0x71, 0xdc, 0x2a, 0xa0, 0x00, 0x1c, 0x00, 0x00, - 0x08, 0x7f, 0xf0, 0x70, 0x1c, 0x7f, 0xc0, 0x70, 0x70, 0x60, - 0x18, 0x00, 0x00, 0x07, 0x2f, 0xf0, 0x70, 0x00, 0x2f, 0xc0, - 0x00, 0xb0, 0xbf, 0xc0, 0x00, 0x00, 0x07, 0xff, 0xf0, 0x0b, - 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, - 0x70, 0x1c, 0x70, 0x1c, 0x70, 0x1c, 0x70, 0xdc, 0x1f, 0x1c, - 0x00, 0x00, 0x08, 0xf0, 0x1c, 0xb0, 0x1c, 0x70, 0xb0, 0x72, - 0xc0, 0x7f, 0x00, 0x00, 0x00, 0x0b, 0xf0, 0x00, 0xb0, 0xb0, - 0x00, 0x70, 0x70, 0xc0, 0x70, 0x72, 0x72, 0xc0, 0x7c, 0x1f, - 0x00, 0x00, 0x00, 0x00, 0x08, 0xf0, 0x3c, 0x1c, 0xe0, 0x07, - 0xc0, 0x1c, 0x70, 0x70, 0x1c, 0x00, 0x00, 0x09, 0x70, 0x07, - 0x00, 0x1c, 0x1c, 0x00, 0x07, 0xf0, 0x00, 0x01, 0xc0, 0x00, - 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xfc, 0x00, - 0x70, 0x07, 0x00, 0x1c, 0x00, 0xaa, 0xac, 0x00, 0x00, 0x09, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, -}; - -const int FONT6x6_INDEX[] = { - 62, 1, 6, - 0x0000, 0x0007, 0x000e, 0x0015, 0x001c, 0x0023, 0x002a, 0x0031, 0x0038, 0x003f, - 0x0046, 0x004d, 0x0054, 0x005b, 0x0062, 0x0069, 0x0070, 0x0077, 0x007e, 0x0085, - 0x008c, 0x0093, 0x009a, 0x00a1, 0x00a8, 0x00af, 0x00b6, 0x00bd, 0x00c4, 0x00cb, - 0x00d2, 0x00d9, 0x00e0, 0x00e7, 0x00ee, 0x00f5, 0x00fc, 0x0103, 0x010a, 0x0111, - 0x0118, 0x011f, 0x0126, 0x012d, 0x0134, 0x013b, 0x0142, 0x0149, 0x0150, 0x0157, - 0x015e, 0x0165, 0x016c, 0x0173, 0x017a, 0x0181, 0x0188, 0x018f, 0x0196, 0x019d, - 0x01a4, 0x01ab, -}; - -const byte FONT6x6_DATA[] = { - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x30, 0x30, - 0x30, 0x30, 0x00, 0x30, 0x06, 0xd8, 0xd8, 0x90, 0x00, 0x00, - 0x00, 0x06, 0x50, 0xf8, 0x50, 0xf8, 0x50, 0x00, 0x06, 0x78, - 0xa0, 0x70, 0x28, 0xf0, 0x20, 0x06, 0xc8, 0xd0, 0x20, 0x58, - 0x98, 0x00, 0x06, 0x60, 0xd0, 0x60, 0xe8, 0xd0, 0x68, 0x06, - 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x06, 0x30, 0x60, 0x60, - 0x60, 0x30, 0x00, 0x07, 0x30, 0x18, 0x18, 0x18, 0x30, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x20, 0x20, - 0xf8, 0x20, 0x20, 0x00, 0x06, 0x00, 0x00, 0x00, 0x30, 0x30, - 0x60, 0x06, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x06, 0x00, - 0x00, 0x00, 0x60, 0x60, 0x00, 0x06, 0x18, 0x30, 0x60, 0xc0, - 0x80, 0x00, 0x06, 0x70, 0x98, 0xa8, 0xc8, 0x70, 0x00, 0x06, - 0x10, 0x30, 0x10, 0x10, 0x10, 0x00, 0x06, 0xf0, 0x08, 0x70, - 0x80, 0xf8, 0x00, 0x06, 0xf0, 0x08, 0x70, 0x08, 0xf0, 0x00, - 0x06, 0x30, 0x50, 0x90, 0xf8, 0x10, 0x00, 0x06, 0xf0, 0x80, - 0xf0, 0x08, 0xf0, 0x00, 0x06, 0x70, 0x80, 0xf0, 0x88, 0x70, - 0x00, 0x06, 0xf8, 0x08, 0x10, 0x20, 0x20, 0x00, 0x06, 0x70, - 0x88, 0x70, 0x88, 0x70, 0x00, 0x06, 0x70, 0x88, 0x78, 0x08, - 0x70, 0x00, 0x06, 0x60, 0x60, 0x00, 0x60, 0x60, 0x00, 0x06, - 0x60, 0x60, 0x00, 0x60, 0x20, 0x40, 0x06, 0x18, 0x30, 0x60, - 0x30, 0x18, 0x00, 0x06, 0x00, 0x78, 0x00, 0x78, 0x00, 0x00, - 0x06, 0x60, 0x30, 0x18, 0x30, 0x60, 0x00, 0x06, 0x70, 0x98, - 0x30, 0x30, 0x00, 0x30, 0x06, 0x70, 0x88, 0xb8, 0xb0, 0x80, - 0x78, 0x06, 0x70, 0x88, 0xf8, 0x88, 0x88, 0x00, 0x06, 0xf0, - 0x88, 0xf0, 0x88, 0xf0, 0x00, 0x06, 0x78, 0x80, 0x80, 0x80, - 0x78, 0x00, 0x06, 0xf0, 0x88, 0x88, 0x88, 0xf0, 0x00, 0x06, - 0xf8, 0x80, 0xf0, 0x80, 0xf8, 0x00, 0x06, 0xf8, 0x80, 0xf0, - 0x80, 0x80, 0x00, 0x06, 0x78, 0x80, 0x98, 0x88, 0x78, 0x00, - 0x06, 0x88, 0x88, 0xf8, 0x88, 0x88, 0x00, 0x06, 0x70, 0x20, - 0x20, 0x20, 0x70, 0x00, 0x06, 0x08, 0x08, 0x08, 0x88, 0x70, - 0x00, 0x06, 0x90, 0xa0, 0xc0, 0xa0, 0x90, 0x00, 0x06, 0x80, - 0x80, 0x80, 0x80, 0xf0, 0x00, 0x06, 0x88, 0xd8, 0xa8, 0x88, - 0x88, 0x00, 0x06, 0x88, 0xc8, 0xa8, 0x98, 0x88, 0x00, 0x06, - 0x70, 0x88, 0x88, 0x88, 0x70, 0x00, 0x06, 0xf0, 0x88, 0xf0, - 0x80, 0x80, 0x00, 0x06, 0x70, 0x88, 0x88, 0x88, 0x70, 0x18, - 0x06, 0xf0, 0x88, 0xf0, 0xa0, 0x98, 0x00, 0x06, 0x78, 0x80, - 0x70, 0x08, 0xf0, 0x00, 0x06, 0xf8, 0x20, 0x20, 0x20, 0x20, - 0x00, 0x06, 0x88, 0x88, 0x88, 0x88, 0x78, 0x00, 0x06, 0x88, - 0x88, 0x88, 0x50, 0x20, 0x00, 0x06, 0x88, 0x88, 0xa8, 0xd8, - 0x88, 0x00, 0x06, 0x88, 0x50, 0x20, 0x50, 0x88, 0x00, 0x06, - 0x88, 0x88, 0x50, 0x20, 0x20, 0x00, 0x06, 0xf8, 0x10, 0x20, - 0x40, 0xf8, 0x00, 0x06, 0x78, 0x60, 0x60, 0x60, 0x78, 0x00, - 0x06, 0xc0, 0x60, 0x30, 0x18, 0x08, 0x00, 0x06, 0x78, 0x18, - 0x18, 0x18, 0x78, 0x00, 0x00, 0x52, 0x41, 0x54, 0x00, 0x41, - 0x4c, 0x43, 0x4f, 0x48, 0x4f, 0x4c, 0x00, 0x53, 0x41, 0x46, - 0x45, 0x20, 0x43, 0x4f, 0x4d, 0x42, 0x49, 0x4e, 0x41, 0x54, - 0x49, 0x4f, 0x4e, 0x00, 0x42, 0x45, 0x41, 0x4b, 0x45, 0x52, - 0x00, 0x4d, 0x49, 0x43, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x4d, - 0x00, 0x56, 0x41, 0x55, 0x4c, 0x54, 0x20, 0x4b, 0x45, 0x59, - 0x00, 0x42, 0x4f, 0x4c, 0x54, 0x20, 0x43, 0x55, 0x54, 0x54, - 0x45, 0x52, 0x53, 0x00, 0x42, 0x4c, 0x4f, 0x57, 0x47, 0x55, - 0x4e, 0x00, 0x4c, 0x4f, 0x56, 0x45, 0x20, 0x50, 0x4f, 0x54, - 0x49, 0x4f, 0x4e, 0x00, 0x4d, 0x4f, 0x4e, 0x45, 0x59, 0x00, - 0x44, 0x41, 0x52, 0x54, 0x53, 0x00, 0x54, 0x41, 0x50, 0x45, - 0x00, 0x4a, 0x55, 0x4e, 0x47, 0x4c, 0x45, 0x20, 0x50, 0x4f, - 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x4d, 0x4f, 0x56, 0x49, -}; - -const char *const NO_HELP_MESSAGE = - "WE ARE UNABLE TO PROVIDE YOU WITH ANY MORE HINTS. YOUR IQ \ -HAS DECREASED SO FAR THAT WE CAN NO LONGER PUT THE HINTS IN TERMS \ -YOU CAN UNDERSTAND."; -const char *const NO_HINTS_MESSAGE = "THE HELP SYSTEM HAS BEEN TURNED OFF FOR THIS GAME."; -const char *const RIVER_HIT1 = "YOU HIT THE ROCKS AND THE CANOE BEGINS TO LEAK."; -const char *const RIVER_HIT2 = "YOU HIT THE ROCKS AND THE CANOE DEVELOPS SERIOUS LEAKS."; -const char *const BAR_MESSAGE = "YOU ARE TOO BUSY TRYING TO KEEP FROM SINKING TO DO THAT"; -const char *const HELPLVLTXT[3] = { - " LEVEL 1 ", - " LEVEL 2 ", - " LEVEL 3 " -}; - -const char *const IQLABELS[9] = { - "VEGETABLE", - "NEANDERTHAL", - "LOBOTOMIZED", - "DENSE", - "AVERAGE", - "INTELLIGENT", - "MURPHYITE", - "BRILLIANT", - "GENIUS" -}; - -const byte DEATH_SCREENS[58] = { - 0, 1, 0, 0, 0, 0, 0, 0, 2, 0, - 0, 2, 4, 2, 1, 0, 0, 0, 0, 0, - 0, 2, 7, 7, 4, 6, 7, 10, 4, 2, - 0, 0, 0, 0, 5, 5, 3, 3, 3, 5, - 8, 8, 11, 9, 8, 12, 0, 1, 9, 8, - 8, 0, 5, 8, 0, 12, 12, 11 -}; - -const byte DEATH_SCREENS_DEMO[34] = { - 1, 2, 1, 1, 1, 1, 1, 1, 4, 1, - 3, 4, 2, 4, 2, 1, 1, 1, 1, 1, - 1, 4, 2, 4, 2, 4, 2, 4, 4, 4, - 1, 1, 1, 1 -}; - -const char *const DEATH_TEXT[58] = { - "SAM SALVADOR SPOTS YOU AND LETS YOU HAVE IT.", - "WHILE TAKING A MOONLIGHT SWIM YOU DISCOVER THAT PIRANHA REALLY CAN STRIP FLESH TO THE BONE.", - "THE GUARD FILLS YOU FULL OF HOLES BEFORE TOSSING YOU TO THE PIRANHA.", - "YOU'RE ONLY ABLE TO SWIM HALFWAY ACROSS THE RIVER BEFORE RUNNING OUT OF AIR. " - "YOU MAKE SO MUCH NOISE GASPING FOR BREATH THAT SAM EASILY FINDS YOU AND LEAVES " - "YOU IN THE RIVER PERMANENTLY.", - "SAM SALVADOR NOTICES SOMEONE HAS BEEN PLAYING WITH THE CARGO. " - "HE TRACKS YOU DOWN AND LETS YOU HAVE IT.", - "THE GUARD COMES AROUND THE CORNER. HE DECIDES THAT THREE LEAD SLUGS WILL " - "TEACH YOU TO BE MORE POLITE.", - "THE CAPTAIN IS WAITING OUTSIDE THE DOOR.", - "THE CAPTAIN'S RANDOM SHOOTING FINALLY FINDS ITS TARGET.", - "THE CRATE OUTSIDE THE WINDOW EXPLODES, DESTROYING THE SHIP. " - "UNFORTUNATELY, YOU'RE STILL ABOARD.", - "THE DOOR WAS NOT BARRED AND THE CAPTAIN WALKS RIGHT IN AND PARTS YOUR HAIR.", - - "", - "YOU RUN OUT ON DECK, THEN REALIZE THAT MAYA IS STILL TIED UP. " - "AS YOU TURN TO GO BACK THE BOAT BLOWS UP.", - "AFTER YOU FAIL TO PROVE YOUR DIVINITY THE NATIVES EAT YOU FOR LUNCH.", - "THIS IS THE GENERIC DEATH SCENE", - "YOU ONLY MAKE IT HALFWAY ACROSS THE RIVER BEFORE THE PIRANHA STRIKE.", - "WITH NOTHING TO PROTECT HIM FROM THE HAIL OF BULLETS ALLEN IS QUICKLY GUNNED DOWN. " - "JASON AND MAYA SOON FOLLOW...", - "THE COMBINATION OF THE WIND AND GUNFIRE KNOCK THE CORRUGATED IRON OVER, " - "LEAVING YOU WITHOUT PROTECTION.", - "WITHOUT SUFFICIENT AMMUNITION, ALLEN IS UNABLE TO HOLD OFF THE ATTACKERS FOR LONG. " - "THIS RESULTS IN A SERIOUS CASE OF LEAD POISONING. ADDITIONAL AMMUNITION SHOULD " - "HAVE BEEN PURCHASED AT THE RIO BLANCO TRADING POST (CHAPTER 6).", - "ALLEN IS A MARVELOUS SHOT, BUT HIS AMMUNITION IS NOT UNLIMITED. " - "SOON IT IS ALL OVER.", - "THE PILOT FEELS YOU ARE TOO CLOSE AND PULLS THE TRIGGER.", - - "THE PILOT SHOOTS YOU IN THE HEART, THEN TOSSES YOUR LIFELESS BODY OUT THE DOOR.", - "THE PLANE CRASHES INTO THE JUNGLE CANOPY AT 200 MPH.", - "THE CANOE HITS THE ROCKS AND CAPSIZES, AND THE PIRANHA MAKE YOU THEIR LUNCH GUESTS.", - "YOU TAKE THE WRONG BRANCH AND ACCIDENTALLY DISCOVER THE FOURTH TALLEST WATERFALL " - "IN SOUTH AMERICA.", - "YOU TAKE THE WRONG BRANCH AND DISCOVER A VERY HUNGRY TRIBE OF CANNIBALS.", - "YOU TAKE THE WRONG BRANCH AND BECOME LOST IN THE WINDING WATERWAYS. " - "YOU WANDER UNTIL YOU STARVE TO DEATH.", - "YOU TAKE THE WRONG BRANCH AND BECOME TRAPPED IN THE RAPIDS. " - "EVENTUALLY YOU AND MAYA ARE CRUSHED BETWEEN THE ROCKS.", - "YOU WAIT AROUND FOR SOME TIME, BUT HANS STROHEIM NEVER SPEAKS TO YOU AGAIN. " - "FINALLY YOU RETURN HOME KNOWING YOU HAVE FAILED.", - "DECIDING THAT YOU THREATEN HIM AND HIS WORK, HANS STROHEIM HAS THE NATIVES " - "IN THE VILLAGE KILL YOU.", - "YOU DO NOT GET FAR ENOUGH AWAY BEFORE THE DYNAMITE EXPLODES AND YOU ARE BLOWN " - "INTO A THOUSAND PIECES.", - - "YOU ARE STANDING SO CLOSE TO THE ENTRANCE WHEN SANCEZ AND HIS MEN BREAK THROUGH " - "THE WALL THAT YOU ARE QUICKLY SPOTTED AND SHOT", - "THE AMAZON SENTINELS SPOT YOU AND FILL YOU FULL OF ARROWS.", - "SAM MAY BE UGLY, BUT HE'S NOT DEAF. HE HEARS ALL THE NOISE YOU ARE MAKING AND " - "CANCELS YOUR BOARDING PASS.", - "WITH THE BAR OFF THE DOOR THE CAPTAIN WALTZES IN AND BLOWS YOU AWAY", - "THE BEAR WANDERS OFF INTO THE WOODS AND DISTURBS THE TWO LOVEBIRDS. " - "WHEN THEY COME OUT THEY FIND YOU AND PUT YOU IN THE BIG HOUSE FOR TWENTY YEARS.", - "WHEN YOU DO NOT LEAVE THE SECURITY AREA QUICKLY ENOUGH YOU ARE ARRESTED AND CONVICTED " - "AS A COMMIE SPY. YOU EMBARK ON A NEW CAREER STAMPING OUT LICENSE PLATES.", - "THE HUNGRY BEAR SPOTS YOU AND DECIDES YOU WILL MAKE A NICE APPETIZER.", - "YOU DISTURB THE BEAR'S LUNCH AND HE EATS YOU FOR DESSERT.", - "AFTER FAILING TO FIND ANY LUNCH AT THE GARBAGE CAN THE BEAR EATS YOU INSTEAD.", - "THE SUSPICIOUS LIBRARIAN CALLS SECURITY AND YOU ARE SENT TO JAIL.", - - "YOU PLUMMET 10,000 FEET TO YOUR DEATH.", - "EL LOCO FLIES INTO AN INSANE RAGE AND BEATS YOU TO A BLOODY PULP.", - "THE WOMAN WALKS OUT THE DOOR AND NEVER RETURNS. YOU SPEND THE REST OF YOUR LIFE " - "IN A FUTILE ATTEMPT TO LOCATE ALLEN.", - "YOU SLIP OFF THE PLATFORM AND FALL TO YOUR DEATH.", - "YOU SLIP OFF THE PLATFORM AND FALL TO YOUR DEATH.", - "YOU COME TOO CLOSE TO THE POWERFUL JAWS OF THE ANT AND HE SNIPS YOU IN TWO BEFORE " - "DEVOURING YOU.", - "B.O.B. HAS A FLAW IN HIS PROGRAMMING THAT DIRECTS HIM TO SHOOT FIRST AND ASK QUESTIONS LATER.", - "THE PLANE SINKS AND THE PIRHANA ATTACK BEFORE YOU EVEN GET OUT THE DOOR.", - "MAYA FALLS OFF THE END OF THE BROKEN BRIDGE.", - "YOUR WEIGHT IS JUST ENOUGH TO CAUSE THE REMAINING SUPPORT CABLE TO SNAP AND YOU " - "FALL TO THE BOTTOM OF THE GORGE.", - - "EVEN WITH REPAIRS THE BRIDGE IS NOT STRONG ENOUGH TO HOLD TWO PEOPLE.", - "SANCHEZ AND HIS MEN FIND YOU AND HOLD FIRING SQUAD PRACTICE.", - "THE TWO GUARDS ARE DISTURBED IN THEIR LOVE NEST AND COME LOOKING FOR ANYONE ACTING SUSPICIOUS. " - "THEY FIND YOU AND SEND YOU UP THE RIVER.", - "THE PARACHUTE IS NOT LARGE ENOUGH TO SUPPORT YOU, AND YOU HIT THE TREES AT 140 M.P.H.", - "SANCHEZ AND HIS MEN FOLLOW YOU ACROSS THE BRIDGE AND CUT YOU DOWN IN A HAIL OF GUNFIRE", - "YOU TRIED TO STAB THE ANT BUT HIS SHELL IS TOO DIFFICULT TO PENETRATE. " - "YOU NOTICE A SLIGHT CUT IN THE SHELL UNDERNEATH BUT YOU CAN'T GET TO IT " - "AND HE SNIPS YOU INTO DELICIOUS MEATY CHUNKS.", - "AFTER THE ANT FINISHES SUCKING ALL OF THE SAP OUT OF THE VINE HE TURNS HIS ATTENTION BACK TO YOU " - "AND BITES YOUR HEAD OFF.", - "THE CANTINA OWNER NOTICES YOU ARE TRYING TO STEAL OBJECTS FROM THE TABLES. " - "TWENTY YEARS LATER YOU ARE RELEASED FROM A SOUTH AMERICAN PRISON." -}; - -const char *const DEATH_TEXT_DEMO[34] = { - "SAM SALVADOR SPOTS YOU AND LETS YOU HAVE IT.", - "WHILE TAKING A MOONLIGHT SWIM YOU DISCOVER THAT PIRANHA REALLY CAN STRIP FLESH TO THE BONE.", - "THE GUARD FILLS YOU FULL OF HOLES BEFORE TOSSING YOU TO THE PIRANHA.", - "YOU'RE ONLY ABLE TO SWIM HALFWAY ACROSS THE RIVER BEFORE RUNNING OUT OF AIR. YOU MAKE SO MUCH NOISE GASPING FOR BREATH THAT SAM EASILY FINDS YOU AND LEAVES YOU IN THE RIVER PERMANENTLY.", - "SAM SALVADOR NOTICES SOMEONE HAS BEEN PLAYING WITH THE CARGO. HE TRACKS YOU DOWN AND LETS YOU HAVE IT.", - "THE GUARD COMES AROUND THE CORNER. HE DECIDES THAT THREE LEAD SLUGS WILL TEACH YOU TO BE MORE POLITE.", - "THE CAPTAIN IS WAITING OUTSIDE THE DOOR.", - "THE CAPTAIN'S RANDOM SHOOTING FINALLY FINDS ITS TARGET.", - "THE CRATE OUTSIDE THE WINDOW EXPLODES, DESTROYING THE SHIP. UNFORTUNATELY, YOU'RE STILL ABOARD.", - "THE DOOR WAS NOT BARRED AND THE CAPTAIN WALKS RIGHT IN AND PARTS YOUR HAIR.", - "", - "YOU RUN OUT ON DECK, THEN REALIZE THAT MAYA IS STILL TIED UP. AS YOU TURN TO GO BACK THE BOAT BLOWS UP.", - "AFTER YOU FAIL TO PROVE YOUR DIVINITY THE NATIVES EAT YOU FOR LUNCH.", - "THIS IS THE GENERIC DEATH SCENE", - "YOU ONLY MAKE IT HALFWAY ACROSS THE RIVER BEFORE THE PIRANHA STRIKE.", - "WITH NOTHING TO PROTECT HIM FROM THE HAIL OF BULLETS ALLEN IS QUICKLY GUNNED DOWN. JASON AND MAYA SOON FOLLOW...", - "THE COMBINATION OF THE WIND AND GUNFIRE KNOCK THE CORRUGATED IRON OVER, LEAVING YOU WITHOUT PROTECTION.", - "WITHOUT SUFFICIENT AMMUNITION, ALLEN IS UNABLE TO HOLD OFF THE ATTACKERS FOR LONG. THIS RESULTS IN A SERIOUS CASE OF LEAD POISONING.", - "ALLEN IS A MARVELOUS SHOT, BUT HIS AMMUNITION IS NOT UNLIMITED. SOON IT IS ALL OVER.", - "THE PILOT FEELS YOU ARE TOO CLOSE AND PULLS THE TRIGGER.", - "THE PILOT SHOOTS YOU IN THE HEAD, THEN TOSSES YOUR LIFELESS", - "THE PLANE CRASHES INTO THE JUNGLE CANOPY AT 200 MPH.", - "THE CANOE HITS THE ROCKS AND CAPSIZES, AND THE PIRANHA MAKE YOU THEIR LUNCH GUESTS.", - "YOU ACCIDENTALLY DISCOVER THE FOURTH TALLEST WATERFALL IN SOUTH AMERICA.", - "YOU DISCOVER A VERY HUNGRY TRIBE OF CANNIBALS.", - "YOU BECOME LOST IN THE WINDING WATERWAYS AND WANDER UNTIL YOU STARVE TO DEATH.", - "YOU BECOME TRAPPED IN THE RAPIDS AND ARE CRUSHED BETWEEN THE ROCKS.", - "YOU WAIT AROUND FOR SOME TIME, BUT HANS STROHEIM NEVER SPEAKS TO YOU AGAIN. FINALLY YOU RETURN HOME KNOWING YOU HAVE FAILED.", - "DECIDING THAT YOU THREATEN HIM AND HIS WORK, HANS STROHEIM HAS THE NATIVES IN THE VILLAGE KILL YOU.", - "YOU DO NOT GET FAR ENOUGH AWAY BEFORE THE DYNAMITE EXPLODES AND YOU ARE BLOWN INTO A THOUSAND PIECES.", - "STANDING OUT IN THE OPEN YOU ARE EXPOSED TO THE HAIL OF BULLETS FROM SANCHEZ' MEN.", - "THE AMAZON SENTINELS SPOT YOU AND FILL YOU FULL OF ARROWS.", - "SAM MAY BE UGLY, BUT HE'S NOT DEAF. HE HEARS ALL THE NOISE YOU ARE MAKING AND CANCELS YOUR BOARDING PASS.", - "WITH THE BAR OFF THE DOOR THE CAPTAIN WALTZES IN AND BLOWS YOU AWAY" -}; - const int DEATH_CELLS[13][3] = { { 0, 94, 2 }, { 0, 94, 3 }, @@ -1984,94 +165,6 @@ const int CHAPTER_JUMP[14] = { 0, 12, 10, 15, 19, 25, 31, 36, 45, 46, 29, 55, 61, 0 }; -const int COMBO_TABLE[85][4] = { - { -1, -1, -1, -1 }, - { 12, 3, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { 24, 25, -1, -1 }, - { 10, 24, -1, -1 }, - { -1, -1, -1, -1 }, - { 8, 24, -1, -1 }, - { -1, -1, -1, -1 }, - { 1, 3, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { 7, 25, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { 80, 81, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { 41, 42, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { 39, 40, -1, -1 }, - { 38, 40, -1, -1 }, - { -1, -1, -1, -1 }, - { 32, 42, 77, 78 }, - { -1, -1, -1, -1 }, - { 60, 61, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { 73, 72, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { 64, 67, -1, -1 }, - { -1, -1, -1, -1 }, - { 59, 60, -1, -1 }, - { 58, 60, -1, -1 }, - { 43, 61, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { 56, 67, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { 50, 72, -1, -1 }, - { 75, 77, -1, -1 }, - { 74, 77, -1, -1 }, - { -1, -1, -1, -1 }, - { 41, 78, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { 29, 81, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 }, - { -1, -1, -1, -1 } -}; - const int ANTWALK[24] = { 0, 3, 0, 1, 5, 0, diff --git a/engines/access/amazon/amazon_resources.h b/engines/access/amazon/amazon_resources.h index 10dea02abc..ca0bfeb5b7 100644 --- a/engines/access/amazon/amazon_resources.h +++ b/engines/access/amazon/amazon_resources.h @@ -24,6 +24,8 @@ #define ACCESS_AMAZON_RESOURCES_H #include "common/scummsys.h" +#include "common/array.h" +#include "access/resources.h" namespace Access { @@ -42,9 +44,6 @@ struct RiverStruct { int _offsetY; }; -extern const char *const FILENAMES[]; -extern const char *const FILENAMES_DEMO[]; - extern const int SIDEOFFR[]; extern const int SIDEOFFL[]; extern const int SIDEOFFU[]; @@ -58,8 +57,6 @@ extern const int DIAGOFFULY[]; extern const int DIAGOFFDLX[]; extern const int DIAGOFFDLY[]; -extern const byte *const CURSORS[10]; - extern const int _travelPos[][2]; extern const int OVEROFFR[]; @@ -75,37 +72,6 @@ extern const int OVEROFFULY[]; extern const int OVEROFFDLX[]; extern const int OVEROFFDLY[]; -extern const byte *const ROOM_TABLE[]; -extern const char *const ROOM_DESCR[]; -extern const byte *const ROOM_TABLE_DEMO[]; -extern const int ROOM_NUMB; - -extern const byte *const CHARTBL[]; -extern const byte *const CHARTBL_DEMO[]; - -extern const char *const INVENTORY_NAMES[]; - -extern const int FONT2_INDEX[]; - -extern const byte FONT2_DATA[]; - -extern const int FONT6x6_INDEX[]; - -extern const byte FONT6x6_DATA[]; - -extern const char *const NO_HELP_MESSAGE; -extern const char *const NO_HINTS_MESSAGE; -extern const char *const RIVER_HIT1; -extern const char *const RIVER_HIT2; -extern const char *const BAR_MESSAGE; -extern const char *const HELPLVLTXT[3]; -extern const char *const IQLABELS[9]; -extern const byte DEATH_SCREENS[58]; -extern const byte DEATH_SCREENS_DEMO[34]; - -extern const char *const DEATH_TEXT[58]; -extern const char *const DEATH_TEXT_DEMO[34]; - extern const int DEATH_CELLS[13][3]; extern const int CHAPTER_CELLS[17][3]; @@ -155,6 +121,30 @@ extern const int CAST_END_OBJ1[4][4]; extern const int RMOUSE[10][2]; +class AmazonResources: public Resources { +protected: + /** + * Load data from the access.dat file + */ + virtual void load(Common::SeekableReadStream &s); +public: + Common::Array FONT2_INDEX; + Common::Array FONT2_DATA; + Common::Array FONT6x6_INDEX; + Common::Array FONT6x6_DATA; + Common::String NO_HELP_MESSAGE; + Common::String NO_HINTS_MESSAGE; + Common::String RIVER_HIT1; + Common::String RIVER_HIT2; + Common::String BAR_MESSAGE; + Common::String HELPLVLTXT[3]; + Common::String IQLABELS[9]; +public: + AmazonResources(AccessEngine *vm); +}; + +#define AMRES (*((Amazon::AmazonResources *)_vm->_res)) + } // End of namespace Amazon } // End of namespace Access diff --git a/engines/access/amazon/amazon_room.cpp b/engines/access/amazon/amazon_room.cpp index 29742f66bd..c027f4e7c6 100644 --- a/engines/access/amazon/amazon_room.cpp +++ b/engines/access/amazon/amazon_room.cpp @@ -41,10 +41,7 @@ AmazonRoom::~AmazonRoom() { } void AmazonRoom::loadRoom(int roomNumber) { - if (_vm->isDemo()) - loadRoomData(ROOM_TABLE_DEMO[roomNumber]); - else - loadRoomData(ROOM_TABLE[roomNumber]); + loadRoomData(&AMRES.ROOMTBL[roomNumber]._data[0]); } void AmazonRoom::reloadRoom() { diff --git a/engines/access/amazon/amazon_scripts.cpp b/engines/access/amazon/amazon_scripts.cpp index d8f4663401..9ff6a2952d 100644 --- a/engines/access/amazon/amazon_scripts.cpp +++ b/engines/access/amazon/amazon_scripts.cpp @@ -401,10 +401,10 @@ void AmazonScripts::cmdHelp_v2() { _game->_useItem = 0; if (_game->_noHints) { - printString(NO_HELP_MESSAGE); + printString(AMRES.NO_HELP_MESSAGE); return; } else if (_game->_hintLevel == 0) { - printString(NO_HINTS_MESSAGE); + printString(AMRES.NO_HINTS_MESSAGE); return; } } diff --git a/engines/access/char.cpp b/engines/access/char.cpp index aca7262952..76dfca6df0 100644 --- a/engines/access/char.cpp +++ b/engines/access/char.cpp @@ -78,25 +78,12 @@ CharEntry::CharEntry() { /*------------------------------------------------------------------------*/ CharManager::CharManager(AccessEngine *vm) : Manager(vm) { - switch (vm->getGameID()) { - case GType_Amazon: - // Setup character list - if (_vm->isDemo()) { - for (int i = 0; i < 27; ++i) - _charTable.push_back(CharEntry(Amazon::CHARTBL_DEMO[i], vm)); - } else { - for (int i = 0; i < 37; ++i) - _charTable.push_back(CharEntry(Amazon::CHARTBL[i], vm)); - } - break; - - case GType_MartianMemorandum: - for (int i = 0; i < 27; ++i) - _charTable.push_back(CharEntry(Martian::CHARTBL_MM[i], vm)); - break; - - default: - error("Unknown game"); + // Setup character list + for (uint idx = 0; idx < _vm->_res->CHARTBL.size(); ++idx) { + if (_vm->_res->CHARTBL[idx].size() == 0) + _charTable.push_back(CharEntry()); + else + _charTable.push_back(CharEntry(&_vm->_res->CHARTBL[idx][0], _vm)); } _charFlag = 0; diff --git a/engines/access/debugger.cpp b/engines/access/debugger.cpp index bc61b0a749..48c7290249 100644 --- a/engines/access/debugger.cpp +++ b/engines/access/debugger.cpp @@ -69,29 +69,9 @@ Debugger::Debugger(AccessEngine *vm) : GUI::Debugger(), _vm(vm) { registerCmd("scene", WRAP_METHOD(Debugger, Cmd_LoadScene)); registerCmd("cheat", WRAP_METHOD(Debugger, Cmd_Cheat)); registerCmd("playmovie", WRAP_METHOD(Debugger, Cmd_PlayMovie)); - - switch (vm->getGameID()) { - case GType_Amazon: - _sceneNumb = Amazon::ROOM_NUMB; - _sceneDescr = new Common::String[_sceneNumb]; - for (int i = 0; i < _sceneNumb; i++) - _sceneDescr[i] = Common::String(Amazon::ROOM_DESCR[i]); - break; - case GType_MartianMemorandum: - _sceneNumb = Martian::ROOM_NUMB; - _sceneDescr = new Common::String[_sceneNumb]; - for (int i = 0; i < _sceneNumb; i++) - _sceneDescr[i] = Common::String(Martian::ROOM_DESCR[i]); - break; - default: - _sceneDescr = nullptr; - _sceneNumb = 0; - break; - } } Debugger::~Debugger() { - delete[] _sceneDescr; } bool Debugger::Cmd_LoadScene(int argc, const char **argv) { @@ -99,18 +79,18 @@ bool Debugger::Cmd_LoadScene(int argc, const char **argv) { case 1: debugPrintf("Current scene is: %d\n\n", _vm->_player->_roomNumber); - for (int i = 0; i < _sceneNumb; i++) - if (_sceneDescr[i].size()) - debugPrintf("%d - %s\n", i, _sceneDescr[i].c_str()); + for (uint i = 0; i < _vm->_res->ROOMTBL.size(); i++) + if (!_vm->_res->ROOMTBL[i]._desc.empty()) + debugPrintf("%d - %s\n", i, _vm->_res->ROOMTBL[i]._desc.c_str()); return true; case 2: { int newRoom = strToInt(argv[1]); - if (newRoom < 0 || newRoom >= _sceneNumb) { + if (newRoom < 0 || newRoom >= (int)_vm->_res->ROOMTBL.size()) { debugPrintf("Invalid Room Number\n"); return true; } - if (!_sceneDescr[newRoom].size()) { + if (_vm->_res->ROOMTBL[newRoom]._desc.empty()) { debugPrintf("Unused Room Number\n"); return true; } diff --git a/engines/access/debugger.h b/engines/access/debugger.h index 1c1e00327c..641b85c19b 100644 --- a/engines/access/debugger.h +++ b/engines/access/debugger.h @@ -40,8 +40,6 @@ protected: bool Cmd_LoadScene(int argc, const char **argv); bool Cmd_Cheat(int argc, const char **argv); bool Cmd_PlayMovie(int argc, const char **argv); - Common::String *_sceneDescr; - int _sceneNumb; public: static Debugger *init(AccessEngine *vm); void postEnter(); diff --git a/engines/access/events.cpp b/engines/access/events.cpp index 6ffe67acfb..d62b05c33f 100644 --- a/engines/access/events.cpp +++ b/engines/access/events.cpp @@ -74,7 +74,7 @@ void EventsManager::setCursor(CursorType cursorId) { _invCursor.w / 2, _invCursor.h / 2, 0); } else { // Get a pointer to the mouse data to use, and get the cursor hotspot - const byte *srcP = Amazon::CURSORS[cursorId]; + const byte *srcP = &_vm->_res->CURSORS[cursorId][0]; int hotspotX = (int16)READ_LE_UINT16(srcP); int hotspotY = (int16)READ_LE_UINT16(srcP + 2); srcP += 4; diff --git a/engines/access/files.cpp b/engines/access/files.cpp index 4d734a67a9..b9c0f7080d 100644 --- a/engines/access/files.cpp +++ b/engines/access/files.cpp @@ -84,20 +84,6 @@ byte *Resource::data() { /*------------------------------------------------------------------------*/ FileManager::FileManager(AccessEngine *vm) : _vm(vm) { - switch (vm->getGameID()) { - case GType_Amazon: - if (_vm->isDemo()) - _filenames = &Amazon::FILENAMES_DEMO[0]; - else - _filenames = &Amazon::FILENAMES[0]; - break; - case GType_MartianMemorandum: - _filenames = &Martian::FILENAMES[0]; - break; - default: - error("Unknown game"); - } - _fileNumber = -1; _setPaletteFlag = true; } @@ -215,8 +201,8 @@ void FileManager::handleFile(Resource *res) { void FileManager::setAppended(Resource *res, int fileNum) { // Open the file for access - if (!res->_file.open(_filenames[fileNum])) - error("Could not open file %s", _filenames[fileNum]); + if (!res->_file.open(_vm->_res->FILENAMES[fileNum])) + error("Could not open file %s", _vm->_res->FILENAMES[fileNum].c_str()); // If a different file has been opened then previously, load its index if (_fileNumber != fileNum) { diff --git a/engines/access/files.h b/engines/access/files.h index 714ea44c75..d081934e91 100644 --- a/engines/access/files.h +++ b/engines/access/files.h @@ -70,7 +70,6 @@ public: class FileManager { private: AccessEngine *_vm; - const char * const *_filenames; void openFile(Resource *res, const Common::String &filename); diff --git a/engines/access/inventory.cpp b/engines/access/inventory.cpp index 3823b17283..d4a869be28 100644 --- a/engines/access/inventory.cpp +++ b/engines/access/inventory.cpp @@ -66,27 +66,9 @@ InventoryManager::InventoryManager(AccessEngine *vm) : Manager(vm) { _iconDisplayFlag = true; _boxNum = 0; - const char *const *names; - const int *combineP; - - switch (vm->getGameID()) { - case GType_Amazon: - names = Amazon::INVENTORY_NAMES; - combineP = &Amazon::COMBO_TABLE[0][0]; - _inv.resize(85); - for (uint i = 0; i < _inv.size(); ++i, combineP += 4) - _inv[i].load(names[i], combineP); - break; - case GType_MartianMemorandum: - names = Martian::INVENTORY_NAMES; - combineP = nullptr; - _inv.resize(55); - for (uint i = 0; i < _inv.size(); ++i) - _inv[i].load(names[i], nullptr); - break; - default: - error("Unknown game"); - } + _inv.resize(_vm->_res->INVENTORY.size()); + for (uint idx = 0; idx < _inv.size(); ++idx) + _inv[idx].load(_vm->_res->INVENTORY[idx]._desc, _vm->_res->INVENTORY[idx]._combo); for (uint i = 0; i < 26; ++i) { const int *r = INVCOORDS[i]; @@ -217,12 +199,15 @@ int InventoryManager::newDisplayInv() { } int InventoryManager::displayInv() { - int *inv = (int *) malloc (Martian::INVENTORY_SIZE * sizeof(int)); + int *inv = (int *) malloc(_vm->_res->INVENTORY.size() * sizeof(int)); + const char **names = (const char **)malloc(_vm->_res->INVENTORY.size() * sizeof(const char *)); - for (int i = 0; i < Martian::INVENTORY_SIZE; i++) + for (uint i = 0; i < _vm->_res->INVENTORY.size(); i++) { inv[i] = _inv[i]._value; + names[i] = _inv[i]._name.c_str(); + } _vm->_events->forceSetCursor(CURSOR_CROSSHAIRS); - _vm->_invBox->getList(Martian::INVENTORY_NAMES, inv); + _vm->_invBox->getList(names, inv); int btnSelected = 0; int boxX = _vm->_invBox->doBox_v1(_startInvItem, _startInvBox, btnSelected); diff --git a/engines/access/martian/martian_game.cpp b/engines/access/martian/martian_game.cpp index 3fdba8d260..4e858568fe 100644 --- a/engines/access/martian/martian_game.cpp +++ b/engines/access/martian/martian_game.cpp @@ -68,8 +68,8 @@ void MartianEngine::initVariables() { _timers.push_back(te); } - _player->_playerX = _player->_rawPlayer.x = _travelPos[_player->_roomNumber][0]; - _player->_playerY = _player->_rawPlayer.y = _travelPos[_player->_roomNumber][1]; + _player->_playerX = _player->_rawPlayer.x = _res->ROOMTBL[_player->_roomNumber]._travelPos.x; + _player->_playerY = _player->_rawPlayer.y = _res->ROOMTBL[_player->_roomNumber]._travelPos.y; _room->_selectCommand = -1; _events->setNormalCursor(CURSOR_CROSSHAIRS); _mouseMode = 0; @@ -280,10 +280,10 @@ void MartianEngine::doCredits() { void MartianEngine::setupGame() { // Load death list - _deaths.resize(20); - for (int i = 0; i < 20; ++i) { - _deaths[i]._screenId = Martian::DEATH_SCREENS[i]; - _deaths[i]._msg = Martian::DEATHMESSAGE[i]; + _deaths.resize(_res->DEATHS.size()); + for (uint idx = 0; idx < _deaths.size(); ++idx) { + _deaths[idx]._screenId = _res->DEATHS[idx]._screenId; + _deaths[idx]._msg = _res->DEATHS[idx]._msg; } // Setup timers @@ -297,14 +297,14 @@ void MartianEngine::setupGame() { } // Miscellaneous - // TODO: Replace with Martian fonts when located - _fonts._font1.load(Amazon::FONT6x6_INDEX, Amazon::FONT6x6_DATA); - _fonts._font2.load(Amazon::FONT2_INDEX, Amazon::FONT2_DATA); + Amazon::AmazonResources &res = *((Amazon::AmazonResources *)_res); + _fonts._font1.load(&res.FONT6x6_INDEX[0], &res.FONT6x6_DATA[0]); + _fonts._font2.load(&res.FONT2_INDEX[0], &res.FONT2_DATA[0]); // Set player room and position _player->_roomNumber = 7; - _player->_playerX = _player->_rawPlayer.x = _travelPos[_player->_roomNumber][0]; - _player->_playerY = _player->_rawPlayer.y = _travelPos[_player->_roomNumber][1]; + _player->_playerX = _player->_rawPlayer.x = _res->ROOMTBL[_player->_roomNumber]._travelPos.x; + _player->_playerY = _player->_rawPlayer.y = _res->ROOMTBL[_player->_roomNumber]._travelPos.y; } void MartianEngine::showDeathText(Common::String msg) { diff --git a/engines/access/martian/martian_resources.cpp b/engines/access/martian/martian_resources.cpp index 474ec2f71c..dc75b83379 100644 --- a/engines/access/martian/martian_resources.cpp +++ b/engines/access/martian/martian_resources.cpp @@ -27,690 +27,10 @@ namespace Access { namespace Martian { -const char *const FILENAMES[] = { - "R00.AP", "R01.AP", "R02.AP", "R03.AP", "R04.AP", "R05.AP", "R06.AP", "R07.AP", - "R08.AP", "R09.AP", "R10.AP", "R11.AP", "R12.AP", "R13.AP", "R14.AP", "R15.AP", - "R16.AP", "R17.AP", "R18.AP", "R19.AP", "R20.AP", "R21.AP", "R22.AP", "R23.AP", - "R24.AP", "R25.AP", "R26.AP", "R27.AP", "R28.AP", "R29.AP", "R30.AP", "R31.AP", - "R32.AP", "R33.AP", "R34.AP", "R35.AP", "R36.AP", "R37.AP", "R38.AP", "R39.AP", - "R40.AP","TITLE.AP","R42.AP","S01.AP", "R44.AP", "R45.AP","SOUND.AP","MUSIC.AP", - "DEAD.AP","EST.AP", "W02.AP", "C02.AP", "C05.AP", "C04.AP", "C10.AP", "C03.AP", - "C07.AP", "LOVE.AP","CAFE.AP","C08.AP", "C18.AP", "C19.AP", "C21.AP", "C23.AP", - "C12.AP", "C16.AP","CAFE1.AP","C05A.AP","C06.AP","C11.AP", "C13.AP", "C20.AP", - "C16A.AP","C09.AP", "R45.AP", "R46.AP", "R47.AP", "R48.AP", "R49.AP" -}; - -const byte MOUSE0[] = { - // hotspot x and y, uint16 LE - 0, 0, 0, 0, - // byte 1: number of skipped pixels - // byte 2: number of plotted pixels - // then, pixels - 0, 2, 0xF7, 5, - 0, 3, 0xF7, 0xF7, 5, - 0, 3, 0xF7, 0xF7, 5, - 0, 4, 0xF7, 0xF7, 0xF7, 5, - 0, 4, 0xF7, 0xF7, 0xF7, 5, - 0, 5, 0xF7, 0xF7, 0xF7, 0xF7, 5, - 0, 5, 0xF7, 0xF7, 0xF7, 0xF7, 5, - 0, 6, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 5, - 0, 6, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 5, - 0, 7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 5, - 0, 6, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 5, - 0, 5, 0xF7, 0xF7, 0xF7, 0xF7, 5, - 2, 3, 0xF7, 0xF7, 5, - 3, 3, 0xF7, 0xF7, 5, - 3, 3, 0xF7, 0xF7, 5, - 4, 2, 0xF7, 5 -}; -const byte MOUSE1[] = { - // hotspot x and y, uint16 LE - 7, 0, 7, 0, - // byte 1: number of skipped pixels - // byte 2: number of plotted pixels - // then, pixels - 6, 1, 0xF7, - 4, 5, 0xFF, 0xFF, 0, 0xFF, 0xFF, - 3, 7, 0xFF, 0, 0, 0, 0, 0, 0xFF, - 2, 9, 0xFF, 0, 0, 0, 0xF7, 0, 0, 0, 0xFF, - 1, 11, 0xFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, - 1, 11, 0xFF, 0, 0, 0, 0, 0xF7, 0, 0, 0, 0, 0xFF, - 0, 13, 0xF7, 0, 0, 0xF7, 0, 0xF7, 0, 0xF7, 0, 0xF7, 0, 0, 0xF7, - 1, 11, 0xFF, 0, 0, 0, 0, 0xF7, 0, 0, 0, 0, 0xFF, - 1, 11, 0xFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, - 2, 9, 0xFF, 0, 0, 0, 0xF7, 0, 0, 0, 0xFF, - 3, 7, 0xFF, 0, 0, 0, 0, 0, 0xFF, - 4, 5, 0xFF, 0xFF, 0, 0xFF, 0xFF, - 6, 1, 0xF7, - 0, 0, - 0, 0, - 0, 0 -}; -const byte MOUSE2[] = { - // hotspot x and y, uint16 LE - 8, 0, 8, 0, - // byte 1: number of skipped pixels - // byte 2: number of plotted pixels - // then, pixels - 0, 0, - 0, 0, - 7, 2, 4, 5, - 7, 2, 4, 5, - 7, 2, 4, 5, - 7, 2, 4, 5, - 7, 2, 4, 5, - 2, 12, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 5, - 7, 2, 4, 5, - 7, 2, 4, 5, - 7, 2, 4, 5, - 7, 2, 4, 5, - 7, 2, 4, 5, - 0, 0, - 0, 0, - 0, 0 -}; -const byte MOUSE3[] = { - // hotspot x and y, uint16 LE - 0, 0, 0, 0, - // byte 1: number of skipped pixels - // byte 2: number of plotted pixels - // then, pixels - 0, 11, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 0, 12, 6, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 5, - 0, 12, 6, 7, 7, 7, 7, 7, 7, 7, 7, 6, 5, 5, - 0, 12, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, - 0, 12, 6, 6, 6, 6, 6, 5, 6, 6, 6, 6, 6, 5, - 0, 12, 6, 6, 6, 6, 5, 0, 0, 6, 6, 6, 6, 5, - 0, 12, 6, 6, 6, 6, 6, 0, 6, 6, 6, 6, 6, 5, - 0, 12, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, - 0, 12, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, - 0, 12, 6, 6, 6, 6, 6, 5, 6, 6, 6, 6, 6, 5, - 0, 12, 6, 6, 6, 6, 6, 5, 6, 6, 6, 6, 6, 5, - 0, 12, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, - 1, 11, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 0, 0, - 0, 0, - 0, 0 -}; -const byte *const CURSORS[4] = { MOUSE0, MOUSE1, MOUSE2, MOUSE3 }; +MartianResources::MartianResources(AccessEngine *vm) : Resources(vm) { +} -const int _travelPos[][2] = { - { -1, 0 }, - { 228, 117 }, - { 28, 98 }, - { 161, 140 }, - { 160, 116 }, - { 34, 119 }, - { 166, 105 }, - { 260, 126 }, - { 37, 107 }, - { 78, 139 }, - { 0, 0 }, - { 13, 112 }, - { 0, 0 }, - { 16, 122 }, - { 33, 126 }, - { 10, 160 }, - { 150, 102 }, - { 134, 160 }, - { 160, 76 }, - { 0, 0 }, - { 0, 0 }, - { 36, 116 }, - { 214, 113 }, - { 30, 127 }, - { 143, 131 }, - { 163, 103 }, - { 254, 106 }, - { 28, 161 }, - { 11, 164 }, - { 276, 134 }, - { 93, 118 }, - { 22, 150 }, - { 282, 156 }, - { 149, 92 }, - { 0, 0 }, - { 43, 410 }, - { 0, 0 }, - { 10, 136 }, - { 41, 100 }, - { 157, 97 }, - { -1, 5 }, - { -1, 4 }, - { -1, 10 }, - { -1, 7 }, - { -1, 3 }, - { -1, 8 }, - { -1, 6 }, - { -1, 20 }, - { -1, 18 }, - { -1, 19 }, - { -1, 21 } -}; - -const int INVENTORY_SIZE = 55; -const char *const INVENTORY_NAMES[] = { - "CAMERA", "LENS", "PHOTOS", "MAIL", "GUN", - "CASH", "COMLINK", "AMMO", "LOCKPICK KIT", "EARRING", - "RECIEPTS", "PAPER", "LADDER", "BOOTS", "DOCUMENTS", - "KNIFE", "DAGGER", "KEYS", "ROCK", "LOG", - "SHOVEL", "STONE", "REMOTE CONTROL", "FOOD AND WATER", "DOOR CARD KEY", - "FLASHLIGHT", "INTERLOCK KEY", "TOOLS", "REBREATHER", "JET PACK", - "ROD", "HCL2", "SAFE CARD KEY", "TUNING FORK", "STONE", - "ROSE", "KEY", "NOTE", "ALLEN WRENCH", "HOVER BOARD", - "BLUE PRINTS", "LETTER", "MEMORANDUM", "MARKERS", "FILM", - "ANDRETTI FILM", "GLASSES", "AMULET", "FACIAL KIT", "CAT FOOD", - "MONKEY WRENCH", "BIG DICK CARD", "BRA", "BOLT", nullptr -}; - -const byte ROOM_TABLE1[] = { - 0x00, 0x2f, 0x00, 0x0d, 0x00, 0x30, 0x22, 0x30, 0x01, 0x00, - 0x00, 0x00, 0x01, 0x01, 0x00, 0x03, 0x00, 0xff, 0x01, 0x00, - 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0xc0, 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x2e, 0x00, 0x05, 0x00, 0x01, 0x00, 0xff, 0xff, -}; -const byte ROOM_TABLE2[] = { - 0x00, 0x2f, 0x00, 0x0d, 0x00, 0x32, 0x28, 0x25, 0x02, 0x00, - 0x00, 0x00, 0x02, 0x02, 0x00, 0x03, 0x00, 0xff, 0x02, 0x00, - 0x02, 0x00, 0x02, 0x00, 0x01, 0x00, 0xc8, 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x2e, 0x00, 0x06, 0x00, 0x01, 0x00, 0xff, 0xff, -}; -const byte ROOM_TABLE3[] = { - 0x00, 0x2f, 0x00, 0x0f, 0x00, 0x1e, 0x19, 0x24, 0x03, 0x00, - 0x00, 0x00, 0x03, 0x03, 0x00, 0x03, 0x00, 0xff, 0x03, 0x00, - 0x02, 0x00, 0x03, 0x00, 0x01, 0x00, 0x78, 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x02, 0x00, - 0x03, 0x00, 0x04, 0x00, 0x01, 0x00, 0x03, 0x00, 0x05, 0x00, - 0x01, 0x00, 0x03, 0x00, 0x06, 0x00, 0x01, 0x00, 0x2e, 0x00, - 0x01, 0x00, 0x01, 0x00, 0xff, 0xff, -}; -const byte ROOM_TABLE4[] = { - 0x00, 0x2f, 0x00, 0x06, 0x00, 0x36, 0x27, 0x32, 0x04, 0x00, - 0x00, 0x00, 0x04, 0x04, 0x00, 0x03, 0x00, 0xff, 0x04, 0x00, - 0x02, 0x00, 0x04, 0x00, 0x01, 0x00, 0xc8, 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x2e, 0x00, 0x07, 0x00, 0x01, 0x00, 0x2e, 0x00, 0x05, 0x00, - 0x01, 0x00, 0xff, 0xff, -}; -const byte ROOM_TABLE5[] = { - 0x00, 0x2f, 0x00, 0x00, 0x00, 0x28, 0x19, 0x36, 0x05, 0x00, - 0x00, 0x00, 0x05, 0x05, 0x00, 0x03, 0x00, 0xff, 0x05, 0x00, - 0x02, 0x00, 0x05, 0x00, 0x01, 0x00, 0xa0, 0x20, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x2e, 0x00, 0x02, 0x00, 0x01, 0x00, 0x2e, 0x00, 0x03, 0x00, - 0x01, 0x00, 0xff, 0xff, -}; -const byte ROOM_TABLE6[] = { - 0x00, 0x2f, 0x00, 0x07, 0x00, 0x40, 0x36, 0x36, 0x06, 0x00, - 0x00, 0x00, 0x06, 0x06, 0x00, 0x03, 0x00, 0xff, 0x06, 0x00, - 0x02, 0x00, 0x06, 0x00, 0x01, 0x00, 0xfe, 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x2e, 0x00, 0x13, 0x00, 0x01, 0x00, 0x2e, 0x00, 0x08, 0x00, - 0x01, 0x00, 0x2e, 0x00, 0x14, 0x00, 0x01, 0x00, 0x2e, 0x00, - 0x07, 0x00, 0x01, 0x00, 0xff, 0xff, -}; -const byte ROOM_TABLE7[] = { - 0x00, 0x2f, 0x00, 0x0e, 0x00, 0x40, 0x32, 0x3b, 0x07, 0x00, - 0x00, 0x00, 0x07, 0x07, 0x00, 0x03, 0x00, 0xff, 0x07, 0x00, - 0x02, 0x00, 0x07, 0x00, 0x01, 0x00, 0xfe, 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x2e, 0x00, 0x14, 0x00, 0x01, 0x00, 0x2e, 0x00, 0x07, 0x00, - 0x01, 0x00, 0xff, 0xff, -}; -const byte ROOM_TABLE8[] = { - 0x00, 0x2f, 0x00, 0x0a, 0x00, 0x30, 0x22, 0x46, 0x08, 0x00, - 0x00, 0x00, 0x08, 0x08, 0x00, 0x03, 0x00, 0xff, 0x08, 0x00, - 0x02, 0x00, 0x08, 0x00, 0x01, 0x00, 0xc0, 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, - 0xff, 0xff, -}; -const byte ROOM_TABLE9[] = { - 0x00, 0x2f, 0x00, 0x07, 0x00, 0x32, 0x0c, 0x29, 0x09, 0x00, - 0x00, 0x00, 0x09, 0x09, 0x00, 0x03, 0x00, 0xff, 0x09, 0x00, - 0x02, 0x00, 0x09, 0x00, 0x01, 0x00, 0xc8, 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, - 0xff, 0xff, -}; -const byte ROOM_TABLE11[] = { - 0x00, 0x2f, 0x00, 0x00, 0x00, 0x40, 0x3a, 0x22, 0x0b, 0x00, - 0x00, 0x00, 0x0b, 0x0b, 0x00, 0x03, 0x00, 0xff, 0x0b, 0x00, - 0x02, 0x00, 0x0b, 0x00, 0x01, 0x00, 0xfe, 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, - 0xff, 0xff, -}; -const byte ROOM_TABLE13[] = { - 0x00, 0x2f, 0x00, 0x0c, 0x00, 0x40, 0x36, 0x2c, 0x0d, 0x00, - 0x00, 0x00, 0x0d, 0x0d, 0x00, 0x03, 0x00, 0xff, 0x0d, 0x00, - 0x02, 0x00, 0x0d, 0x00, 0x01, 0x00, 0xe6, 0x40, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x2e, 0x00, 0x0a, 0x00, 0x01, 0x00, 0x2e, 0x00, 0x07, 0x00, - 0x01, 0x00, 0x2e, 0x00, 0x0b, 0x00, 0x01, 0x00, 0x2e, 0x00, - 0x15, 0x00, 0x01, 0x00, 0xff, 0xff, -}; -const byte ROOM_TABLE14[] = { - 0x00, 0x2f, 0x00, 0x05, 0x00, 0x40, 0x3e, 0x33, 0x0e, 0x00, - 0x00, 0x00, 0x0e, 0x0e, 0x00, 0x03, 0x00, 0xff, 0x0e, 0x00, - 0x02, 0x00, 0x0e, 0x00, 0x01, 0x00, 0xfe, 0x40, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x2e, 0x00, 0x09, 0x00, 0x01, 0x00, 0x2e, 0x00, 0x07, 0x00, - 0x01, 0x00, 0x2e, 0x00, 0x13, 0x00, 0x01, 0x00, 0x2e, 0x00, - 0x0a, 0x00, 0x01, 0x00, 0xff, 0xff, -}; -const byte ROOM_TABLE15[] = { - 0x00, 0x2f, 0x00, 0x0c, 0x00, 0x28, 0x0c, 0x5e, 0x0f, 0x00, - 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x03, 0x00, 0xff, 0x0f, 0x00, - 0x02, 0x00, 0x0f, 0x00, 0x01, 0x00, 0xb4, 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x2e, 0x00, 0x11, 0x00, 0x01, 0x00, 0xff, 0xff, -}; -const byte ROOM_TABLE16[] = { - 0x00, 0x2f, 0x00, 0x05, 0x00, 0x28, 0x1e, 0x24, 0x10, 0x00, - 0x00, 0x00, 0x10, 0x10, 0x00, 0x03, 0x00, 0xff, 0x10, 0x00, - 0x02, 0x00, 0x10, 0x00, 0x01, 0x00, 0xa0, 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x2e, 0x00, 0x07, 0x00, 0x01, 0x00, 0xff, 0xff, -}; -const byte ROOM_TABLE17[] = { - 0x00, 0x2f, 0x00, 0x06, 0x00, 0x28, 0x19, 0x2b, 0x11, 0x00, - 0x00, 0x00, 0x11, 0x11, 0x00, 0x03, 0x00, 0xff, 0x11, 0x00, - 0x02, 0x00, 0x11, 0x00, 0x01, 0x00, 0xa0, 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x2e, 0x00, 0x05, 0x00, 0x01, 0x00, 0xff, 0xff, -}; -const byte ROOM_TABLE18[] = { - 0x00, 0x2f, 0x00, 0x00, 0x00, 0x2d, 0x14, 0x3c, 0x12, 0x00, - 0x00, 0x00, 0x12, 0x12, 0x00, 0x03, 0x00, 0xff, 0x12, 0x00, - 0x02, 0x00, 0x12, 0x00, 0x01, 0x00, 0xb1, 0x40, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x2e, 0x00, 0x05, 0x00, 0x01, 0x00, 0xff, 0xff, -}; -const byte ROOM_TABLE21[] = { - 0x00, 0x2f, 0x00, 0x07, 0x00, 0x3c, 0x2a, 0x29, 0x15, 0x00, - 0x00, 0x00, 0x15, 0x15, 0x00, 0x03, 0x00, 0xff, 0x15, 0x00, - 0x02, 0x00, 0x15, 0x00, 0x01, 0x00, 0xf0, 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x2e, 0x00, 0x12, 0x00, 0x01, 0x00, 0x2e, 0x00, 0x07, 0x00, - 0x01, 0x00, 0xff, 0xff, -}; -const byte ROOM_TABLE22[] = { - 0x00, 0x2f, 0x00, 0x0a, 0x00, 0x40, 0x2d, 0x27, 0x16, 0x00, - 0x00, 0x00, 0x16, 0x16, 0x00, 0x03, 0x00, 0xff, 0x16, 0x00, - 0x02, 0x00, 0x16, 0x00, 0x01, 0x00, 0xfe, 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x2e, 0x00, 0x16, 0x00, 0x01, 0x00, 0x2e, 0x00, 0x07, 0x00, - 0x01, 0x00, 0xff, 0xff, -}; -const byte ROOM_TABLE23[] = { - 0x00, 0x2f, 0x00, 0x0a, 0x00, 0x40, 0x38, 0x24, 0x17, 0x00, - 0x00, 0x00, 0x17, 0x17, 0x00, 0x03, 0x00, 0xff, 0x17, 0x00, - 0x02, 0x00, 0x17, 0x00, 0x01, 0x00, 0xfe, 0x40, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x2e, 0x00, 0x0f, 0x00, 0x01, 0x00, 0x2e, 0x00, 0x17, 0x00, - 0x01, 0x00, 0xff, 0xff, -}; -const byte ROOM_TABLE24[] = { - 0x00, 0x2f, 0x00, 0x06, 0x00, 0x3e, 0x10, 0x62, 0x18, 0x00, - 0x00, 0x00, 0x18, 0x18, 0x00, 0x03, 0x00, 0xff, 0x18, 0x00, - 0x02, 0x00, 0x18, 0x00, 0x01, 0x00, 0xf8, 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x2e, 0x00, 0x16, 0x00, 0x01, 0x00, 0xff, 0xff, -}; -const byte ROOM_TABLE25[] = { - 0x00, 0x2f, 0x00, 0x0e, 0x00, 0x3e, 0x37, 0x19, 0x19, 0x00, - 0x00, 0x00, 0x19, 0x19, 0x00, 0x03, 0x00, 0xff, 0x19, 0x00, - 0x02, 0x00, 0x19, 0x00, 0x01, 0x00, 0xf8, 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x2e, 0x00, 0x10, 0x00, 0x01, 0x00, 0x2e, 0x00, 0x07, 0x00, - 0x01, 0x00, 0xff, 0xff, -}; -const byte ROOM_TABLE26[] = { - 0x00, 0x2f, 0x00, 0x06, 0x00, 0x34, 0x28, 0x28, 0x1a, 0x00, - 0x00, 0x00, 0x1a, 0x1a, 0x00, 0x03, 0x00, 0xff, 0x1a, 0x00, - 0x02, 0x00, 0x1a, 0x00, 0x01, 0x00, 0xd0, 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x2e, 0x00, 0x07, 0x00, 0x01, 0x00, 0xff, 0xff, -}; -const byte ROOM_TABLE27[] = { - 0x00, 0x2f, 0x00, 0x0f, 0x00, 0x1b, 0x16, 0x18, 0x1b, 0x00, - 0x00, 0x00, 0x1b, 0x1b, 0x00, 0x03, 0x00, 0xff, 0x1b, 0x00, - 0x02, 0x00, 0x1b, 0x00, 0x01, 0x00, 0x70, 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x2e, 0x00, 0x0d, 0x00, 0x01, 0x00, 0x2e, 0x00, 0x07, 0x00, - 0x01, 0x00, 0xff, 0xff, -}; -const byte ROOM_TABLE28[] = { - 0x00, 0x2f, 0x00, 0x09, 0x00, 0x25, 0x10, 0x43, 0x1c, 0x00, - 0x00, 0x00, 0x1c, 0x1c, 0x00, 0x03, 0x00, 0xff, 0x1c, 0x00, - 0x02, 0x00, 0x1c, 0x00, 0x01, 0x00, 0x94, 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, - 0xff, 0xff, -}; -const byte ROOM_TABLE29[] = { - 0x00, 0x2f, 0x00, 0x0a, 0x00, 0x20, 0x18, 0x56, 0x1d, 0x00, - 0x00, 0x00, 0x1d, 0x1d, 0x00, 0x03, 0x00, 0xff, 0x1d, 0x00, - 0x02, 0x00, 0x1d, 0x00, 0x01, 0x00, 0x80, 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x2e, 0x00, 0x17, 0x00, 0x01, 0x00, 0x2e, 0x00, 0x10, 0x00, - 0x02, 0x00, 0xff, 0xff, -}; -const byte ROOM_TABLE30[] = { - 0x00, 0x2f, 0x00, 0x07, 0x00, 0x3f, 0x1c, 0x27, 0x1e, 0x00, - 0x00, 0x00, 0x1e, 0x1e, 0x00, 0x03, 0x00, 0xff, 0x1e, 0x00, - 0x02, 0x00, 0x1e, 0x00, 0x01, 0x00, 0xfe, 0x00, 0xff, 0xff, - 0xff, 0xff, 0x1e, 0x00, 0x04, 0x00, 0xff, 0xff, 0x2e, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x2e, 0x00, 0x07, 0x00, 0x01, 0x00, - 0x2e, 0x00, 0x15, 0x00, 0x01, 0x00, 0xff, 0xff, -}; -const byte ROOM_TABLE31[] = { - 0x00, 0x2f, 0x00, 0x0d, 0x00, 0x32, 0x2e, 0x69, 0x1f, 0x00, - 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x03, 0x00, 0xff, 0x1f, 0x00, - 0x02, 0x00, 0x1f, 0x00, 0x01, 0x00, 0xc8, 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, - 0xff, 0xff, -}; -const byte ROOM_TABLE32[] = { - 0x00, 0x2f, 0x00, 0x07, 0x00, 0x40, 0x3b, 0x4b, 0x20, 0x00, - 0x00, 0x00, 0x20, 0x20, 0x00, 0x03, 0x00, 0xff, 0x20, 0x00, - 0x02, 0x00, 0x20, 0x00, 0x01, 0x00, 0xfe, 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x2e, 0x00, 0x05, 0x00, 0x01, 0x00, 0xff, 0xff, -}; -const byte ROOM_TABLE33[] = { - 0x00, 0x2f, 0x00, 0x0b, 0x00, 0x30, 0x10, 0x51, 0x21, 0x00, - 0x00, 0x00, 0x21, 0x21, 0x00, 0x03, 0x00, 0xff, 0x21, 0x00, - 0x02, 0x00, 0x21, 0x00, 0x01, 0x00, 0xc0, 0x40, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, - 0xff, 0xff, -}; -const byte ROOM_TABLE35[] = { - 0x00, 0x2f, 0x00, 0x0f, 0x00, 0x1e, 0x18, 0x25, 0x23, 0x00, - 0x00, 0x00, 0x23, 0x23, 0x00, 0x03, 0x00, 0xff, 0x23, 0x00, - 0x02, 0x00, 0x23, 0x00, 0x01, 0x00, 0x78, 0x18, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x2e, 0x00, 0x0e, 0x00, 0x01, 0x00, 0x2e, 0x00, 0x07, 0x00, - 0x01, 0x00, 0x2e, 0x00, 0x16, 0x00, 0x01, 0x00, 0x2e, 0x00, - 0x0c, 0x00, 0x01, 0x00, 0xff, 0xff, -}; -const byte ROOM_TABLE37[] = { - 0x00, 0x2f, 0x00, 0x0f, 0x00, 0x3f, 0x3a, 0x1a, 0x25, 0x00, - 0x00, 0x00, 0x25, 0x25, 0x00, 0x03, 0x00, 0xff, 0x25, 0x00, - 0x02, 0x00, 0x25, 0x00, 0x01, 0x00, 0xfe, 0x40, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x2e, 0x00, 0x0d, 0x00, 0x01, 0x00, 0xff, 0xff, -}; -const byte ROOM_TABLE38[] = { - 0x00, 0x2f, 0x00, 0x0d, 0x00, 0x40, 0x32, 0x32, 0x26, 0x00, - 0x00, 0x00, 0x26, 0x26, 0x00, 0x03, 0x00, 0xff, 0x26, 0x00, - 0x02, 0x00, 0x26, 0x00, 0x01, 0x00, 0xf0, 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x2e, 0x00, 0x0b, 0x00, 0x01, 0x00, 0xff, 0xff, -}; -const byte ROOM_TABLE39[] = { - 0x00, 0x2f, 0x00, 0x0a, 0x00, 0x3c, 0x10, 0x4c, 0x27, 0x00, - 0x00, 0x00, 0x27, 0x27, 0x00, 0x03, 0x00, 0xff, 0x27, 0x00, - 0x02, 0x00, 0x27, 0x00, 0x01, 0x00, 0xf0, 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x2e, 0x00, 0x11, 0x00, 0x01, 0x00, 0x2e, 0x00, 0x0f, 0x00, - 0x01, 0x00, 0xff, 0xff, -}; -const byte ROOM_TABLE47[] = { - 0x00, 0x2f, 0x00, 0x06, 0x00, 0x28, 0x1e, 0x32, 0x2b, 0x00, - 0x00, 0x00, 0x46, 0x2b, 0x00, 0x03, 0x00, 0xff, 0x2b, 0x00, - 0x02, 0x00, 0x2b, 0x00, 0x01, 0x00, 0xf0, 0x00, 0xff, 0xff, - 0xff, 0xff, 0x2b, 0x00, 0x04, 0x00, 0xff, 0xff, 0x2e, 0x00, - 0x04, 0x00, 0x01, 0x00, 0xff, 0xff, 0x00, -}; -const byte *const ROOM_TABLE[] = { - nullptr, ROOM_TABLE1, ROOM_TABLE2, ROOM_TABLE3, ROOM_TABLE4, ROOM_TABLE5, ROOM_TABLE6, - ROOM_TABLE7, ROOM_TABLE8, ROOM_TABLE9, nullptr, ROOM_TABLE11, nullptr, ROOM_TABLE13, - ROOM_TABLE14, ROOM_TABLE15, ROOM_TABLE16, ROOM_TABLE17, ROOM_TABLE18, nullptr, nullptr, - ROOM_TABLE21, ROOM_TABLE22, ROOM_TABLE23, ROOM_TABLE24, ROOM_TABLE25, ROOM_TABLE26, ROOM_TABLE27, - ROOM_TABLE28, ROOM_TABLE29, ROOM_TABLE30, ROOM_TABLE31, ROOM_TABLE32, ROOM_TABLE33, nullptr, - ROOM_TABLE35, nullptr, ROOM_TABLE37, ROOM_TABLE38, ROOM_TABLE39, nullptr, nullptr, - nullptr, nullptr, nullptr, nullptr, nullptr, ROOM_TABLE47 -}; - -const char *const ROOM_DESCR[] = { - nullptr, "TBD ROOM_TABLE1", "TBD ROOM_TABLE2", "TBD ROOM_TABLE3", "TBD ROOM_TABLE4", - "TBD ROOM_TABLE5", "TBD ROOM_TABLE6", "TBD ROOM_TABLE7", "TBD ROOM_TABLE8", "TBD ROOM_TABLE9", - nullptr, "TBD ROOM_TABLE11", nullptr, "TBD ROOM_TABLE13", "TBD ROOM_TABLE14", - "TBD ROOM_TABLE15", "TBD ROOM_TABLE16", "TBD ROOM_TABLE17", "TBD ROOM_TABLE18", nullptr, - nullptr, "TBD ROOM_TABLE21", "TBD ROOM_TABLE22", "TBD ROOM_TABLE23", "TBD ROOM_TABLE24", - "TBD ROOM_TABLE25", "TBD ROOM_TABLE26", "TBD ROOM_TABLE27", "TBD ROOM_TABLE28", "TBD ROOM_TABLE29", - "TBD ROOM_TABLE30", "TBD ROOM_TABLE31", "TBD ROOM_TABLE32", "TBD ROOM_TABLE33", nullptr, - "TBD ROOM_TABLE35", nullptr, "TBD ROOM_TABLE37", "TBD ROOM_TABLE38", "TBD ROOM_TABLE39", - nullptr, nullptr, nullptr, nullptr, nullptr, - nullptr, nullptr, "TBD ROOM_TABLE47" -}; - -const int ROOM_NUMB = 48; - -const byte MMCHAR_0[] = { - 0x02, 0x31, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, - 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, -}; -const byte MMCHAR_2[] = { - 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x00, 0x00, 0x00, 0x00, 0x32, 0x33, 0x00, 0x01, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x00, 0x00, 0x00, 0x33, - 0x00, 0x02, 0x00, 0x33, 0x00, 0x0b, 0x00, 0x33, 0x00, 0x03, - 0x00, 0x33, 0x00, 0x0c, 0x00, 0x33, 0x00, 0x04, 0x00, 0x33, - 0x00, 0x0d, 0x00, 0x33, 0x00, 0x05, 0x00, 0x33, 0x00, 0x0e, - 0x00, 0x33, 0x00, 0x06, 0x00, 0x33, 0x00, 0x0f, 0x00, 0x33, - 0x00, 0x07, 0x00, 0x33, 0x00, 0x10, 0x00, 0x33, 0x00, 0x08, - 0x00, 0x33, 0x00, 0x11, 0x00, 0x33, 0x00, 0x09, 0x00, 0x33, - 0x00, 0x12, 0x00, 0x33, 0x00, 0x0a, 0x00, 0x33, 0x00, 0x13, - 0x00, 0xff, 0xff, -}; -const byte MMCHAR_3[] = { - 0x02, 0x31, 0x00, 0x03, 0x00, 0x35, 0x00, 0x37, 0x00, 0x02, - 0x00, 0x80, 0x00, 0xf7, 0x00, 0x4b, 0x37, 0x00, 0x01, 0x00, - 0xff, 0x37, 0x00, 0x03, 0x00, 0x37, 0x00, 0x00, 0x00, 0xff, - 0xff, -}; -const byte MMCHAR_4[] = { - 0x01, 0x31, 0x00, 0x0a, 0x00, 0x36, 0x00, 0x35, 0x00, 0x02, - 0x00, 0x80, 0x00, 0xf7, 0x00, 0x49, 0x35, 0x00, 0x01, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x35, 0x00, 0x00, 0x00, 0x35, - 0x00, 0x03, 0x00, 0x35, 0x00, 0x0c, 0x00, 0x35, 0x00, 0x04, - 0x00, 0x35, 0x00, 0x0d, 0x00, 0x35, 0x00, 0x05, 0x00, 0x35, - 0x00, 0x0e, 0x00, 0x35, 0x00, 0x06, 0x00, 0x35, 0x00, 0x0f, - 0x00, 0x35, 0x00, 0x07, 0x00, 0x35, 0x00, 0x10, 0x00, 0x35, - 0x00, 0x08, 0x00, 0x35, 0x00, 0x11, 0x00, 0x35, 0x00, 0x09, - 0x00, 0x35, 0x00, 0x12, 0x00, 0x35, 0x00, 0x0a, 0x00, 0x35, - 0x00, 0x13, 0x00, 0x35, 0x00, 0x0b, 0x00, 0x35, 0x00, 0x14, - 0x00, 0xff, 0xff, -}; -const byte MMCHAR_5[] = { - 0x01, 0x31, 0x00, 0x08, 0x00, 0x37, 0x00, 0x34, 0x00, 0x02, - 0x00, 0x80, 0x00, 0xf7, 0x00, 0x48, 0x34, 0x00, 0x01, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x34, 0x00, 0x00, 0x00, 0x43, - 0x00, 0x00, 0x00, 0x34, 0x00, 0x03, 0x00, 0x43, 0x00, 0x01, - 0x00, 0x34, 0x00, 0x04, 0x00, 0x43, 0x00, 0x02, 0x00, 0x34, - 0x00, 0x05, 0x00, 0x43, 0x00, 0x03, 0x00, 0x34, 0x00, 0x06, - 0x00, 0x43, 0x00, 0x04, 0x00, 0x34, 0x00, 0x07, 0x00, 0x43, - 0x00, 0x05, 0x00, 0x34, 0x00, 0x08, 0x00, 0x43, 0x00, 0x06, - 0x00, 0x34, 0x00, 0x09, 0x00, 0x43, 0x00, 0x07, 0x00, 0x34, - 0x00, 0x0a, 0x00, 0x43, 0x00, 0x08, 0x00, 0x34, 0x00, 0x0b, - 0x00, 0x43, 0x00, 0x09, 0x00, 0x34, 0x00, 0x0c, 0x00, 0x43, - 0x00, 0x0a, 0x00, 0x34, 0x00, 0x0d, 0x00, 0x43, 0x00, 0x0b, - 0x00, 0x34, 0x00, 0x0e, 0x00, 0x43, 0x00, 0x0c, 0x00, 0x34, - 0x00, 0x0f, 0x00, 0x43, 0x00, 0x0d, 0x00, 0x34, 0x00, 0x10, - 0x00, 0xff, 0xff, -}; -const byte MMCHAR_6[] = { - 0x02, 0x31, 0x00, 0x03, 0x00, 0x38, 0x00, 0x44, 0x00, 0x03, - 0x00, 0x80, 0x00, 0xf7, 0x00, 0x4e, 0x44, 0x00, 0x01, 0x00, - 0xff, 0x44, 0x00, 0x02, 0x00, 0x44, 0x00, 0x00, 0x00, 0xff, - 0xff, -}; -const byte MMCHAR_7[] = { - 0x02, 0x31, 0x00, 0x01, 0x00, 0x39, 0x00, 0x38, 0x00, 0x02, - 0x00, 0x80, 0x00, 0xf7, 0x00, 0x4c, 0x38, 0x00, 0x01, 0x00, - 0xff, 0x38, 0x00, 0x03, 0x00, 0x38, 0x00, 0x00, 0x00, 0xff, - 0xff, -}; -const byte MMCHAR_8[] = { - 0x03, 0xff, 0xff, 0xff, 0xff, 0x3a, 0x00, 0xff, 0xff, 0xff, - 0xff, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x01, 0x00, - 0xff, 0x3b, 0x00, 0x02, 0x00, 0x3b, 0x00, 0x00, 0x00, 0xff, - 0xff, -}; -const byte MMCHAR_9[] = { - 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x00, 0x00, 0x00, 0x00, 0x59, 0x4a, 0x00, 0x01, 0x00, - 0xff, 0x4a, 0x00, 0x02, 0x00, 0x4a, 0x00, 0x00, 0x00, 0xff, - 0xff, -}; -const byte MMCHAR_10[] = { - 0x01, 0x31, 0x00, 0x0a, 0x00, 0x3c, 0x00, 0x36, 0x00, 0x02, - 0x00, 0x80, 0x00, 0xf7, 0x00, 0x4a, 0x36, 0x00, 0x01, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x36, 0x00, 0x00, 0x00, 0x36, - 0x00, 0x03, 0x00, 0x36, 0x00, 0x13, 0x00, 0x36, 0x00, 0x04, - 0x00, 0x36, 0x00, 0x14, 0x00, 0x36, 0x00, 0x05, 0x00, 0x36, - 0x00, 0x15, 0x00, 0x36, 0x00, 0x06, 0x00, 0x36, 0x00, 0x16, - 0x00, 0x36, 0x00, 0x07, 0x00, 0x36, 0x00, 0x17, 0x00, 0x36, - 0x00, 0x08, 0x00, 0x36, 0x00, 0x18, 0x00, 0x36, 0x00, 0x09, - 0x00, 0x36, 0x00, 0x19, 0x00, 0x36, 0x00, 0x0a, 0x00, 0x36, - 0x00, 0x1a, 0x00, 0x36, 0x00, 0x0b, 0x00, 0x36, 0x00, 0x1b, - 0x00, 0x36, 0x00, 0x0c, 0x00, 0x36, 0x00, 0x1c, 0x00, 0x36, - 0x00, 0x0d, 0x00, 0x36, 0x00, 0x1d, 0x00, 0x36, 0x00, 0x0e, - 0x00, 0x36, 0x00, 0x1e, 0x00, 0x36, 0x00, 0x0f, 0x00, 0x36, - 0x00, 0x1f, 0x00, 0x36, 0x00, 0x10, 0x00, 0x36, 0x00, 0x20, - 0x00, 0x36, 0x00, 0x11, 0x00, 0x36, 0x00, 0x21, 0x00, 0x36, - 0x00, 0x12, 0x00, 0x36, 0x00, 0x22, 0x00, 0xff, 0xff, -}; -const byte MMCHAR_11[] = { - 0x03, 0xff, 0xff, 0xff, 0xff, 0x3d, 0x00, 0xff, 0xff, 0xff, - 0xff, 0x00, 0x00, 0x00, 0x00, 0x55, 0x45, 0x00, 0x01, 0x00, - 0xff, 0x45, 0x00, 0x02, 0x00, 0x45, 0x00, 0x00, 0x00, 0xff, - 0xff, -}; -const byte MMCHAR_12[] = { - 0x03, 0xff, 0xff, 0xff, 0xff, 0x3e, 0x00, 0xff, 0xff, 0xff, - 0xff, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x40, 0x00, 0x01, 0x00, - 0xff, 0x40, 0x00, 0x02, 0x00, 0x40, 0x00, 0x00, 0x00, 0xff, - 0xff, -}; -const byte MMCHAR_13[] = { - 0x00, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x46, 0x00, 0x02, - 0x00, 0x80, 0x00, 0xf7, 0x00, 0x56, 0x46, 0x00, 0x01, 0x00, - 0xff, 0x46, 0x00, 0x03, 0x00, 0x46, 0x00, 0x00, 0x00, 0x46, - 0x00, 0x04, 0x00, 0x46, 0x00, 0x0d, 0x00, 0x46, 0x00, 0x05, - 0x00, 0x46, 0x00, 0x0e, 0x00, 0x46, 0x00, 0x06, 0x00, 0x46, - 0x00, 0x0f, 0x00, 0x46, 0x00, 0x07, 0x00, 0x46, 0x00, 0x10, - 0x00, 0x46, 0x00, 0x08, 0x00, 0x46, 0x00, 0x11, 0x00, 0x46, - 0x00, 0x09, 0x00, 0x46, 0x00, 0x12, 0x00, 0x46, 0x00, 0x0a, - 0x00, 0x46, 0x00, 0x13, 0x00, 0x46, 0x00, 0x0b, 0x00, 0x46, - 0x00, 0x14, 0x00, 0x46, 0x00, 0x0c, 0x00, 0x46, 0x00, 0x15, - 0x00, 0xff, 0xff, -}; -const byte MMCHAR_15[] = { - 0x00, 0xff, 0xff, 0xff, 0xff, 0x41, 0x00, 0xff, 0xff, 0xff, - 0xff, 0x00, 0x00, 0x00, 0x00, 0x57, 0x47, 0x00, 0x01, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x47, 0x00, 0x00, 0x00, 0x47, - 0x00, 0x02, 0x00, 0x47, 0x00, 0x05, 0x00, 0x47, 0x00, 0x03, - 0x00, 0x47, 0x00, 0x06, 0x00, 0x47, 0x00, 0x04, 0x00, 0x47, - 0x00, 0x07, 0x00, 0xff, 0xff, -}; -const byte MMCHAR_16[] = { - 0x03, 0xff, 0xff, 0xff, 0xff, 0x42, 0x00, 0xff, 0xff, 0xff, - 0xff, 0x00, 0x00, 0x00, 0x00, 0x54, 0x41, 0x00, 0x01, 0x00, - 0xff, 0x41, 0x00, 0x02, 0x00, 0x41, 0x00, 0x00, 0x00, 0xff, - 0xff, -}; -const byte MMCHAR_18[] = { - 0x02, 0x31, 0x00, 0x07, 0x00, 0x44, 0x00, 0x3c, 0x00, 0x03, - 0x00, 0x80, 0x00, 0xf7, 0x00, 0x50, 0x3c, 0x00, 0x01, 0x00, - 0xff, 0x3c, 0x00, 0x02, 0x00, 0x3c, 0x00, 0x00, 0x00, 0xff, - 0xff, -}; -const byte MMCHAR_19[] = { - 0x02, 0x31, 0x00, 0x07, 0x00, 0x45, 0x00, 0x3d, 0x00, 0x03, - 0x00, 0x80, 0x00, 0xf7, 0x00, 0x51, 0x3d, 0x00, 0x01, 0x00, - 0xff, 0x3d, 0x00, 0x02, 0x00, 0x3d, 0x00, 0x00, 0x00, 0xff, - 0xff, -}; -const byte MMCHAR_20[] = { - 0x02, 0x31, 0x00, 0x02, 0x00, 0x46, 0x00, 0x48, 0x00, 0x02, - 0x00, 0x80, 0x00, 0xf7, 0x00, 0x58, 0x48, 0x00, 0x01, 0x00, - 0xff, 0x48, 0x00, 0x03, 0x00, 0x48, 0x00, 0x00, 0x00, 0xff, - 0xff, -}; -const byte MMCHAR_21[] = { - 0x02, 0x31, 0x00, 0x07, 0x00, 0x47, 0x00, 0x3e, 0x00, 0x03, - 0x00, 0x80, 0x00, 0xf7, 0x00, 0x52, 0x3e, 0x00, 0x01, 0x00, - 0xff, 0x3e, 0x00, 0x02, 0x00, 0x3e, 0x00, 0x00, 0x00, 0xff, - 0xff, -}; -const byte MMCHAR_23[] = { - 0x02, 0x31, 0x00, 0x08, 0x00, 0x49, 0x00, 0x3f, 0x00, 0x03, - 0x00, 0x80, 0x00, 0xf7, 0x00, 0x53, 0x3f, 0x00, 0x01, 0x00, - 0xff, 0x3f, 0x00, 0x02, 0x00, 0x3f, 0x00, 0x00, 0x00, 0xff, - 0xff, -}; -const byte MMCHAR_24[] = { - 0x02, 0x32, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x00, 0x00, 0x00, 0x00, 0x47, 0x32, 0x00, 0x02, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x32, 0x00, 0x01, 0x00, 0x32, - 0x00, 0x03, 0x00, 0x32, 0x00, 0x0a, 0x00, 0x32, 0x00, 0x04, - 0x00, 0x32, 0x00, 0x0b, 0x00, 0x32, 0x00, 0x05, 0x00, 0x32, - 0x00, 0x0c, 0x00, 0x32, 0x00, 0x06, 0x00, 0x32, 0x00, 0x0d, - 0x00, 0x32, 0x00, 0x07, 0x00, 0x32, 0x00, 0x0e, 0x00, 0x32, - 0x00, 0x08, 0x00, 0x32, 0x00, 0x0f, 0x00, 0x32, 0x00, 0x09, - 0x00, 0x32, 0x00, 0x10, 0x00, 0xff, 0xff -}; -const byte MMCHAR_25[] = { - 0x02, 0x39, 0x00, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x39, 0x00, 0x00, 0x00, 0x39, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xFF, 0xFF -}; -const byte MMCHAR_26[] = { - 0x01, 0x3a, 0x00, 0x01, 0x00, 0x0a, 0x00, 0xff, 0xff, 0xff, - 0xff, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x3a, 0x00, 0x02, 0x00, - 0xff, 0x3a, 0x00, 0x03, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x42, - 0x00, 0x00, 0x00, 0x3a, 0x00, 0x04, 0x00, 0x42, 0x00, 0x01, - 0x00, 0x3a, 0x00, 0x05, 0x00, 0x42, 0x00, 0x02, 0x00, 0x3a, - 0x00, 0x06, 0x00, 0x42, 0x00, 0x03, 0x00, 0x3a, 0x00, 0x07, - 0x00, 0x42, 0x00, 0x04, 0x00, 0x3a, 0x00, 0x08, 0x00, 0x42, - 0x00, 0x05, 0x00, 0x3a, 0x00, 0x09, 0x00, 0x42, 0x00, 0x06, - 0x00, 0x3a, 0x00, 0x0a, 0x00, 0x42, 0x00, 0x07, 0x00, 0x3a, - 0x00, 0x0b, 0x00, 0x42, 0x00, 0x08, 0x00, 0x3a, 0x00, 0x0c, - 0x00, 0x42, 0x00, 0x09, 0x00, 0x3a, 0x00, 0x0d, 0x00, 0x42, - 0x00, 0x0a, 0x00, 0x3a, 0x00, 0x0e, 0x00, 0x42, 0x00, 0x0b, - 0x00, 0x3a, 0x00, 0x0f, 0x00, 0x42, 0x00, 0x0c, 0x00, 0x3a, - 0x00, 0x10, 0x00, 0x42, 0x00, 0x0d, 0x00, 0x3a, 0x00, 0x11, - 0x00, 0x42, 0x00, 0x0e, 0x00, 0x3a, 0x00, 0x12, 0x00, 0x42, - 0x00, 0x0f, 0x00, 0x3a, 0x00, 0x13, 0x00, 0x42, 0x00, 0x10, - 0x00, 0x3a, 0x00, 0x14, 0x00, 0x42, 0x00, 0x11, 0x00, 0x3a, - 0x00, 0x15, 0x00, 0xff, 0xff -}; -const byte MMCHAR_27[] = { - 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x00, 0x00, 0x00, 0x00, 0x58, 0x49, 0x00, 0x01, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x49, 0x00, 0x00, 0x00, 0x49, - 0x00, 0x02, 0x00, 0x49, 0x00, 0x0a, 0x00, 0x49, 0x00, 0x03, - 0x00, 0x49, 0x00, 0x0b, 0x00, 0x49, 0x00, 0x04, 0x00, 0x49, - 0x00, 0x0c, 0x00, 0x49, 0x00, 0x05, 0x00, 0x49, 0x00, 0x0d, - 0x00, 0x49, 0x00, 0x06, 0x00, 0x49, 0x00, 0x0e, 0x00, 0x49, - 0x00, 0x07, 0x00, 0x49, 0x00, 0x0f, 0x00, 0x49, 0x00, 0x08, - 0x00, 0x49, 0x00, 0x10, 0x00, 0x49, 0x00, 0x09, 0x00, 0x49, - 0x00, 0x11, 0x00, 0xff, 0xff, -}; - -// HACK: MMCHAR_0 has been used to replace the missing CHAR: 1, 14, 17 and 22 -const byte *const CHARTBL_MM[] = { - MMCHAR_0, MMCHAR_0, MMCHAR_2, MMCHAR_3, MMCHAR_4, - MMCHAR_5, MMCHAR_6, MMCHAR_7, MMCHAR_8, MMCHAR_9, - MMCHAR_10, MMCHAR_11, MMCHAR_12, MMCHAR_13, MMCHAR_0, - MMCHAR_15, MMCHAR_16, MMCHAR_0, MMCHAR_18, MMCHAR_19, - MMCHAR_20, MMCHAR_21, MMCHAR_0, MMCHAR_23, MMCHAR_24, - MMCHAR_25, MMCHAR_26, MMCHAR_27 -}; +/*------------------------------------------------------------------------*/ const int SIDEOFFR[] = { 4, 0, 7, 10, 3, 1, 2, 13, 0, 0, 0, 0 }; const int SIDEOFFL[] = { 11, 6, 1, 4, 10, 6, 1, 4, 0, 0, 0, 0 }; @@ -765,7 +85,7 @@ const char *const TRAVDATA[] = { "COOPER BRADBURY", nullptr }; -const char *const _askTBL[] = { +const char *const ASK_TBL[] = { "NONE", "MARSHALL ALEXANDER", "TERRAFORM CORP.", "COLLIER STANTON", "ROCKWELL BACHE", "JOCQUES SPARROW", "NORA DESMOND ALEXANDER", "GALACTIC PICTURES", "LAWRENCE BARKLEY", "TMS", "MAC MALDEN", "STANTON EXPEDITION", "LOWELL PERCIVAL", "CHANTAL VARGAS", "RICK LOGAN", @@ -783,33 +103,6 @@ byte HELP[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; -const byte DEATH_SCREENS[] = { - 5, 5, 3, 3, 7, 4, 6, 2, 2, 2, 1, 5, 3, 5, 2, 8, 5, 3, 8, 5 -}; - -const char *const DEATHMESSAGE[] = { - "A VICIOUS THUG PULLS OUT HIS GUN AND AIR CONDITIONS YOUR BRAIN.", - "BIG DICK COMES BACK AND ANNOUNCES YOUR TIME IS UP. ONE OF HIS BOYS PROCEEDS TO PART YOUR EYEBROWS.", - "ALTHOUGH HIS FIRST SHOT MISSED, THE PUNK FINDS YOU AND TURNS YOU INTO A DOUGHNUT.", - "THE CREEP SPOTS YOU. HE TURNS AND FIRES HIS WEAPON. IT BURNS A HOLE A BUZZARD CAN FLY THROUGH.", - "OBVIOUSLY RICK LOGAN HAS A FEW TRICK UP HIS SLEEVE. A TREMENDOUS WEIGHT HITS YOUR HEAD. YOU MUMBLE; WATCH OUT FOR THAT TREE...", - "SLOWLY SINKING IN THE SLIMY OOZE, YOU THINK OF SEVERAL JELLO WRESTLING MATCHES YOU'VE ATTENDED. BUT NO MORE...", - "THE PATH SUDDENLY GIVES WAY AND YOU FEEL MANY STAKES TEAR THROUGH YOUR FLESH. HOW DO YOU LIKE YOUR STAKE", - "THE SNAKE SINKS ITS FANGS INTO YOU LEG. THE POISON WORKS QUICKLY. THE SNAKE THEN SWALLOWS YOU WHOLE.", - "YOU FADE AWAY, GLOWING LIKE A LIGHTBULB.", - "YOU TOUCH THE BUBBLING RADIOACTIVE SELTZER. IT IMMEDIATELY CAUSES VITAL ORGANS TO ELONGATE AND EXPLODE. YOU DIE WITH AN ABSURD AND FOOLISH LOOK ON YOUR FACE.", - "THE DOGS PRETTY HUNGRY. IT WON'T TAKE HIM LONG TO FINISH SO SIT BACK AND ENJOY IT.", - "ROCKY DOESN'T LIKE BEING FOLLOWED. HE DECIDES TO BEAT YOU. WITHIN AND INCH OF YOUR LIFE. UNFORTUNATELY, HE MISJUDGED THE DISTANCE", - "YOU STUMBLE INTO DEADLY LASER FIRE.", - "THE OUTPOST AND YOUR BODY PARTS ARE BLOWN TO KINGDOM COME.", - "YOU REACH THE TOP, BUT YOUR AIR SOON RUNS OUT LEAVING YOU BREATHLESS.", - "YOU DIE IN THE FIERY EXPLOSION.", - "YOU FALL HUNDREDS OF FEET TO YOUR DEATH.", - "YOU WALK ONTO A PRESSURE SENSITIVE SECURITY PAD. A LASER ZEROS IN AND BLOWS A HOLE THE SIZE OF A SUBARU TIRE THROUGH YOU.", - "DANGERFIELD'S EXPERIMENT BACKFIRES. IT RELEASES A DEMON FROM HIS SUBCONSCIOUS WHICH DESTROYS THE ENTIRE PLANET.", - "ONCE DANGERFIELD GETS OUT OF HIS CHAMBER, HE PULLS OUT A WEAPON AND LETS YOU HAVE IT." -}; - const char *const SPEC7MESSAGE = { "THOMAS DANGERFIELD'S MAD EXPERIMENT OF ATTEMPTING TO HARNESS THE STONE'S POWER, ENDED HIS LIFE. DANGERFIELD WAS A DECENT HUMAN " \ "BEING ONCE, BUT WAS DRIVEN INSANE BY HIS QUEST FOR THE ULTIMATE POWER. ALEXIS AND I DECIDE THAT DEACON HAWKE IS THE ONLY " \ diff --git a/engines/access/martian/martian_resources.h b/engines/access/martian/martian_resources.h index 2eb810ac80..3a4d08b007 100644 --- a/engines/access/martian/martian_resources.h +++ b/engines/access/martian/martian_resources.h @@ -24,31 +24,17 @@ #define ACCESS_MARTIAN_RESOURCES_H #include "common/scummsys.h" +#include "access/resources.h" namespace Access { namespace Martian { -extern const char *const FILENAMES[]; - extern const int SIDEOFFR[]; extern const int SIDEOFFL[]; extern const int SIDEOFFU[]; extern const int SIDEOFFD[]; -extern const byte *const CURSORS[4]; - -extern const int _travelPos[][2]; - -extern const int INVENTORY_SIZE; -extern const char *const INVENTORY_NAMES[]; - -extern const byte *const ROOM_TABLE[]; -extern const char *const ROOM_DESCR[]; -extern const int ROOM_NUMB; - -extern const byte *const CHARTBL_MM[]; - extern const int SIDEOFFR[]; extern const int SIDEOFFL[]; extern const int SIDEOFFU[]; @@ -60,16 +46,23 @@ extern const byte ICON_PALETTE[]; extern const int RMOUSE[10][2]; extern byte HELP[]; -extern const char *const _askTBL[]; +extern const char *const ASK_TBL[]; extern const char *const TRAVDATA[]; -extern const byte DEATH_SCREENS[]; -extern const char *const DEATHMESSAGE[]; extern const char *const SPEC7MESSAGE; extern const byte _byte1EEB5[]; extern const int PICTURERANGE[][2]; +class MartianResources : public Resources { +public: + +public: + MartianResources(AccessEngine *vm); +}; + +#define MMRES (*((Martian::MartianResources *)_vm->_res)) + } // End of namespace Martian } // End of namespace Access diff --git a/engines/access/martian/martian_room.cpp b/engines/access/martian/martian_room.cpp index d5b03db246..0b8b4a842a 100644 --- a/engines/access/martian/martian_room.cpp +++ b/engines/access/martian/martian_room.cpp @@ -39,7 +39,7 @@ MartianRoom::~MartianRoom() { } void MartianRoom::loadRoom(int roomNumber) { - loadRoomData(ROOM_TABLE[roomNumber]); + loadRoomData(&MMRES.ROOMTBL[roomNumber]._data[0]); } void MartianRoom::reloadRoom() { diff --git a/engines/access/resources.cpp b/engines/access/resources.cpp index 8699a4a82f..3dbdc9242b 100644 --- a/engines/access/resources.cpp +++ b/engines/access/resources.cpp @@ -22,9 +22,143 @@ #include "access/resources.h" #include "access/access.h" +#include "access/amazon/amazon_resources.h" +#include "access/martian/martian_resources.h" namespace Access { +Resources *Resources::init(AccessEngine *vm) { + if (vm->getGameID() == GType_Amazon) + return new Amazon::AmazonResources(vm); + else if (vm->getGameID() == GType_MartianMemorandum) + return new Martian::MartianResources(vm); + + error("Unknown game"); +} + +Resources::Resources(AccessEngine *vm): _vm(vm) { +} + +bool Resources::load(Common::String &errorMessage) { + Common::File f; + if (!f.open("access.dat")) { + errorMessage = "Could not locate required access.dat file"; + return false; + } + + // Check for the magic identifier + char buffer[4]; + f.read(buffer, 4); + if (strncmp(buffer, "SVMA", 4)) { + errorMessage = "Located access.dat file had invalid contents"; + return false; + } + + // Validate the version number + uint expectedVersion = 1; + uint version = f.readUint16LE(); + if (version != expectedVersion) { + errorMessage = Common::String::format( + "Incorrect version of access.dat found. Expected %d but got %d", + expectedVersion, version); + return false; + } + + // Load in the index + uint count = f.readUint16LE(); + _datIndex.resize(count); + for (uint idx = 0; idx < _datIndex.size(); ++idx) { + _datIndex[idx]._gameId = f.readByte(); + _datIndex[idx]._discType = f.readByte(); + _datIndex[idx]._demoType = f.readByte(); + _datIndex[idx]._language = (Common::Language)f.readByte(); + _datIndex[idx]._fileOffset = f.readUint32LE(); + } + + // Load in the data for the game + load(f); + + return true; +} + +void Resources::load(Common::SeekableReadStream &s) { + uint count; + + // Get the offset of the data for the game + uint entryOffset = findEntry(_vm->getGameID(), _vm->isCD() ? 1 : 0, + _vm->isDemo() ? 1 : 0, _vm->getLanguage()); + s.seek(entryOffset); + + // Load filename list + count = s.readUint16LE(); + FILENAMES.resize(count); + for (uint idx = 0; idx < count; ++idx) + FILENAMES[idx] = readString(s); + + // Load the character data + count = s.readUint16LE(); + CHARTBL.resize(count); + for (uint idx = 0; idx < count; ++idx) { + uint count2 = s.readUint16LE(); + CHARTBL[idx].resize(count2); + if (count2 > 0) + s.read(&CHARTBL[idx][0], count2); + } + + // Load the room data + count = s.readUint16LE(); + ROOMTBL.resize(count); + for (uint idx = 0; idx < count; ++idx) { + ROOMTBL[idx]._desc = readString(s); + ROOMTBL[idx]._travelPos.x = s.readSint16LE(); + ROOMTBL[idx]._travelPos.y = s.readSint16LE(); + uint count2 = s.readUint16LE(); + ROOMTBL[idx]._data.resize(count2); + if (count2 > 0) + s.read(&ROOMTBL[idx]._data[0], count2); + } + + // Load the deaths list + count = s.readUint16LE(); + DEATHS.resize(count); + for (uint idx = 0; idx < count; ++idx) { + DEATHS[idx]._screenId = s.readByte(); + DEATHS[idx]._msg = readString(s); + } + + // Load in the inventory list + count = s.readUint16LE(); + INVENTORY.resize(count); + for (uint idx = 0; idx < count; ++idx) { + INVENTORY[idx]._desc = readString(s); + for (uint idx2 = 0; idx2 < 4; ++idx2) + INVENTORY[idx]._combo[idx2] = s.readSint16LE(); + } +} + +uint Resources::findEntry(byte gameId, byte discType, byte demoType, Common::Language language) { + for (uint idx = 0; idx < _datIndex.size(); ++idx) { + DATEntry &de = _datIndex[idx]; + if (de._gameId == gameId && de._discType == discType && + de._demoType == demoType && de._language == language) + return de._fileOffset; + } + + error("Could not locate appropriate access.dat entry"); +} + +Common::String Resources::readString(Common::SeekableReadStream &s) { + Common::String result; + char c; + + while ((c = s.readByte()) != 0) + result += c; + + return result; +} + +/*------------------------------------------------------------------------*/ + const byte INITIAL_PALETTE[18 * 3] = { 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, diff --git a/engines/access/resources.h b/engines/access/resources.h index 07b8e5ada9..a9218036b5 100644 --- a/engines/access/resources.h +++ b/engines/access/resources.h @@ -24,6 +24,11 @@ #define ACCESS_RESOURCES_H #include "common/scummsys.h" +#include "common/array.h" +#include "common/language.h" +#include "common/rect.h" +#include "common/str-array.h" +#include "common/stream.h" namespace Access { @@ -33,6 +38,65 @@ extern const char *const GENERAL_MESSAGES[]; extern const int INVCOORDS[][4]; +class AccessEngine; + +class Resources { + struct DATEntry { + byte _gameId; + byte _discType; + byte _demoType; + Common::Language _language; + uint _fileOffset; + }; + struct RoomEntry { + Common::String _desc; + Common::Point _travelPos; + Common::Array _data; + }; + struct DeathEntry { + byte _screenId; + Common::String _msg; + }; + struct InventoryEntry { + Common::String _desc; + int _combo[4]; + }; +protected: + AccessEngine *_vm; + Common::Array _datIndex; + + /** + * Locate a specified entry in the index and return it's file offset + */ + uint findEntry(byte gameId, byte discType, byte demoType, Common::Language language); + + /** + * Read a string in from the passed stream + */ + Common::String readString(Common::SeekableReadStream &s); + + /** + * Load data from the access.dat file + */ + virtual void load(Common::SeekableReadStream &s); +public: + Common::StringArray FILENAMES; + Common::Array< Common::Array > CHARTBL; + Common::Array ROOMTBL; + Common::Array DEATHS; + Common::Array INVENTORY; + Common::Array< Common::Array > CURSORS; + Common::String CANT_GET_THERE; +public: + Resources(AccessEngine *vm); + static Resources *init(AccessEngine *vm); + + /** + * Load the access.dat file + */ + bool load(Common::String &errorMessage); +}; + } // End of namespace Access #endif /* ACCESS_RESOURCES_H */ diff --git a/engines/access/room.cpp b/engines/access/room.cpp index d0f1e59569..759af74cff 100644 --- a/engines/access/room.cpp +++ b/engines/access/room.cpp @@ -927,16 +927,9 @@ RoomInfo::RoomInfo(const byte *data, int gameType, bool isCD, bool isDemo) { _roomFlag = stream.readByte(); - if (gameType == GType_Amazon) { - if (isCD) - _estIndex = stream.readSint16LE(); - else { - _estIndex = -1; - if (!isDemo) - stream.readSint16LE(); - } - } else - _estIndex = -1; + _estIndex = -1; + if (gameType == GType_Amazon && isCD) + _estIndex = stream.readSint16LE(); _musicFile.load(stream); _scaleH1 = stream.readByte(); diff --git a/engines/access/scripts.cpp b/engines/access/scripts.cpp index 41dd5cc0d0..12328566fc 100644 --- a/engines/access/scripts.cpp +++ b/engines/access/scripts.cpp @@ -689,19 +689,20 @@ void Scripts::cmdDoTravel() { int idx = _vm->_travelBox->_tempListIdx[boxX]; if (Martian::_byte1EEB5[idx] != _vm->_byte26CB5) { _vm->_bubbleBox->_bubbleTitle = "_travel"; - _vm->_bubbleBox->printString("YOU CAN'T GET THERE FROM HERE."); + _vm->_bubbleBox->printString(_vm->_res->CANT_GET_THERE); continue; } if (_vm->_player->_roomNumber != idx) { _vm->_player->_roomNumber = idx; _vm->_room->_function = FN_CLEAR1; - if (Martian::_travelPos[idx][0] == -1) { + if (_vm->_res->ROOMTBL[idx]._travelPos.x == -1) { + // For x == -1, the y value is a script Id, not a co-ordinate _vm->_player->_roomNumber = idx; _vm->_room->_conFlag = true; - _vm->_scripts->converse1(Martian::_travelPos[idx][1]); + _vm->_scripts->converse1(_vm->_res->ROOMTBL[idx]._travelPos.y); return; } - _vm->_player->_rawPlayer = Common::Point(Martian::_travelPos[idx][0], Martian::_travelPos[idx][1]); + _vm->_player->_rawPlayer = _vm->_res->ROOMTBL[idx]._travelPos; cmdRetPos(); return; } @@ -1033,7 +1034,7 @@ void Scripts::cmdPrintWatch() { } void Scripts::cmdDispAbout() { - _vm->_travelBox->getList(Martian::_askTBL, _vm->_ask); + _vm->_travelBox->getList(Martian::ASK_TBL, _vm->_ask); int btnSelected = 0; int boxX = _vm->_aboutBox->doBox_v1(_vm->_startAboutItem, _vm->_startAboutBox, btnSelected); _vm->_startAboutItem = _vm->_boxDataStart; diff --git a/engines/access/sound.cpp b/engines/access/sound.cpp index 51ffb88f37..b3317cee5f 100644 --- a/engines/access/sound.cpp +++ b/engines/access/sound.cpp @@ -213,7 +213,7 @@ MusicManager::MusicManager(AccessEngine *vm) : _vm(vm) { // switch (musicType) { case MT_ADLIB: { - if (_vm->getGameID() == GType_Amazon) { + if (_vm->getGameID() == GType_Amazon && !_vm->isDemo()) { Resource *midiDrvResource = _vm->_files->loadFile(92, 1); Common::MemoryReadStream *adLibInstrumentStream = new Common::MemoryReadStream(midiDrvResource->data(), midiDrvResource->_size); -- cgit v1.2.3 From 1fe6e92bf9cd22becab56656444e1ae471ce6746 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Fri, 27 Nov 2015 12:40:33 -0500 Subject: ACCESS: Silence gcc warnings --- engines/access/amazon/amazon_resources.cpp | 3 --- engines/access/amazon/amazon_resources.h | 3 ++- engines/access/martian/martian_resources.cpp | 5 ----- engines/access/martian/martian_resources.h | 3 ++- engines/access/resources.cpp | 3 --- engines/access/resources.h | 3 ++- 6 files changed, 6 insertions(+), 14 deletions(-) diff --git a/engines/access/amazon/amazon_resources.cpp b/engines/access/amazon/amazon_resources.cpp index 2be1c0f8ba..7dbe1c9f90 100644 --- a/engines/access/amazon/amazon_resources.cpp +++ b/engines/access/amazon/amazon_resources.cpp @@ -27,9 +27,6 @@ namespace Access { namespace Amazon { -AmazonResources::AmazonResources(AccessEngine *vm): Resources(vm) { -} - void AmazonResources::load(Common::SeekableReadStream &s) { Resources::load(s); uint count; diff --git a/engines/access/amazon/amazon_resources.h b/engines/access/amazon/amazon_resources.h index ca0bfeb5b7..20d90cc5b6 100644 --- a/engines/access/amazon/amazon_resources.h +++ b/engines/access/amazon/amazon_resources.h @@ -140,7 +140,8 @@ public: Common::String HELPLVLTXT[3]; Common::String IQLABELS[9]; public: - AmazonResources(AccessEngine *vm); + AmazonResources(AccessEngine *vm) : Resources(vm) {} + virtual ~AmazonResources() {} }; #define AMRES (*((Amazon::AmazonResources *)_vm->_res)) diff --git a/engines/access/martian/martian_resources.cpp b/engines/access/martian/martian_resources.cpp index dc75b83379..070fa0f7e3 100644 --- a/engines/access/martian/martian_resources.cpp +++ b/engines/access/martian/martian_resources.cpp @@ -27,11 +27,6 @@ namespace Access { namespace Martian { -MartianResources::MartianResources(AccessEngine *vm) : Resources(vm) { -} - -/*------------------------------------------------------------------------*/ - const int SIDEOFFR[] = { 4, 0, 7, 10, 3, 1, 2, 13, 0, 0, 0, 0 }; const int SIDEOFFL[] = { 11, 6, 1, 4, 10, 6, 1, 4, 0, 0, 0, 0 }; const int SIDEOFFU[] = { 1, 2, 0, 2, 2, 1, 1, 0, 0, 0, 0, 0 }; diff --git a/engines/access/martian/martian_resources.h b/engines/access/martian/martian_resources.h index 3a4d08b007..46cf6a71c1 100644 --- a/engines/access/martian/martian_resources.h +++ b/engines/access/martian/martian_resources.h @@ -58,7 +58,8 @@ class MartianResources : public Resources { public: public: - MartianResources(AccessEngine *vm); + MartianResources(AccessEngine *vm) : Resources(vm) {} + virtual ~MartianResources() {} }; #define MMRES (*((Martian::MartianResources *)_vm->_res)) diff --git a/engines/access/resources.cpp b/engines/access/resources.cpp index 3dbdc9242b..c11dbf6331 100644 --- a/engines/access/resources.cpp +++ b/engines/access/resources.cpp @@ -36,9 +36,6 @@ Resources *Resources::init(AccessEngine *vm) { error("Unknown game"); } -Resources::Resources(AccessEngine *vm): _vm(vm) { -} - bool Resources::load(Common::String &errorMessage) { Common::File f; if (!f.open("access.dat")) { diff --git a/engines/access/resources.h b/engines/access/resources.h index a9218036b5..bb5c3f9f61 100644 --- a/engines/access/resources.h +++ b/engines/access/resources.h @@ -88,7 +88,8 @@ public: Common::Array< Common::Array > CURSORS; Common::String CANT_GET_THERE; public: - Resources(AccessEngine *vm); + Resources(AccessEngine *vm) : _vm(vm) {} + virtual ~Resources() {} static Resources *init(AccessEngine *vm); /** -- cgit v1.2.3 From ee5acb25ad74c8895927b730dc053515416c48ee Mon Sep 17 00:00:00 2001 From: Torbjörn Andersson Date: Fri, 27 Nov 2015 20:58:24 +0100 Subject: ACCESS: Add TODO for access.dat --- dists/engine-data/README | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dists/engine-data/README b/dists/engine-data/README index e87f04c65b..06939dba42 100644 --- a/dists/engine-data/README +++ b/dists/engine-data/README @@ -1,6 +1,9 @@ engine-data README ------------------------------------------------------------------------------- +access.dat +TODO + drascula.dat TODO -- cgit v1.2.3 From 1f1c9803a7debcc09dba0959ce5457eb592dbd49 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Fri, 27 Nov 2015 22:17:09 +0100 Subject: PRINCE: Fix color clipping logic --- engines/prince/graphics.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/engines/prince/graphics.cpp b/engines/prince/graphics.cpp index f556d81eab..3482d79f69 100644 --- a/engines/prince/graphics.cpp +++ b/engines/prince/graphics.cpp @@ -375,30 +375,30 @@ byte GraphicsMan::getBlendTableColor(byte pixelColor, byte backgroundPixelColor, const byte *originalPalette = _vm->_roomBmp->getPalette(); int redFirstOrg = originalPalette[pixelColor * 3] * _vm->_mst_shadow / 256; - CLIP(redFirstOrg, 0, 255); + redFirstOrg = CLIP(redFirstOrg, 0, 255); if (_vm->_mst_shadow <= 256) { int redFirstBack = originalPalette[backgroundPixelColor * 3] * (256 - _vm->_mst_shadow) / 256; - CLIP(redFirstBack, 0, 255); + redFirstBack = CLIP(redFirstBack, 0, 255); redFirstOrg += redFirstBack; - CLIP(redFirstOrg, 0, 255); + redFirstOrg = CLIP(redFirstOrg, 0, 255); } int greenFirstOrg = originalPalette[pixelColor * 3 + 1] * _vm->_mst_shadow / 256; - CLIP(greenFirstOrg, 0, 255); + greenFirstOrg = CLIP(greenFirstOrg, 0, 255); if (_vm->_mst_shadow <= 256) { int greenFirstBack = originalPalette[backgroundPixelColor * 3 + 1] * (256 - _vm->_mst_shadow) / 256; - CLIP(greenFirstBack, 0, 255); + greenFirstBack = CLIP(greenFirstBack, 0, 255); greenFirstOrg += greenFirstBack; - CLIP(greenFirstOrg, 0, 255); + greenFirstOrg = CLIP(greenFirstOrg, 0, 255); } int blueFirstOrg = originalPalette[pixelColor * 3 + 2] * _vm->_mst_shadow / 256; - CLIP(blueFirstOrg, 0, 255); + blueFirstOrg = CLIP(blueFirstOrg, 0, 255); if (_vm->_mst_shadow <= 256) { int blueFirstBack = originalPalette[backgroundPixelColor * 3 + 2] * (256 - _vm->_mst_shadow) / 256; - CLIP(blueFirstBack, 0, 255); + blueFirstBack = CLIP(blueFirstBack, 0, 255); blueFirstOrg += blueFirstBack; - CLIP(blueFirstOrg, 0, 255); + blueFirstOrg = CLIP(blueFirstOrg, 0, 255); } int bigValue = PrinceEngine::kIntMax; // infinity -- cgit v1.2.3 From 6e9fe0052c032e8209d8b549023e40f4e570bdd9 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Fri, 27 Nov 2015 22:19:41 +0100 Subject: CGE2: Fix rounding error --- engines/cge2/vga13h.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/engines/cge2/vga13h.cpp b/engines/cge2/vga13h.cpp index f4064f3565..eb111c3255 100644 --- a/engines/cge2/vga13h.cpp +++ b/engines/cge2/vga13h.cpp @@ -629,11 +629,11 @@ void Sprite::gotoxyz(V2D pos) { if (!_follow) { FXP m = _vm->_eye->_z / (_pos3D._z - _vm->_eye->_z); _pos3D._x = (_vm->_eye->_x + (_vm->_eye->_x - _pos2D.x) / m); - _pos3D._x.round(); + _pos3D._x = _pos3D._x.round(); if (!_constY) { _pos3D._y = _vm->_eye->_y + (_vm->_eye->_y - _pos2D.y) / m; - _pos3D._y.round(); + _pos3D._y = _pos3D._y.round(); } } -- cgit v1.2.3 From 866baf1d9a3a1a463fc4fe83c287168291b865ac Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Fri, 27 Nov 2015 22:26:23 +0100 Subject: LASTEXPRESS: Removing excess check --- engines/lastexpress/game/savegame.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/engines/lastexpress/game/savegame.cpp b/engines/lastexpress/game/savegame.cpp index d9f2993c17..e2682ba0d1 100644 --- a/engines/lastexpress/game/savegame.cpp +++ b/engines/lastexpress/game/savegame.cpp @@ -497,9 +497,6 @@ void SaveLoad::loadLastGame() { return; } - if (!_savegame) - error("[SaveLoad::loadGame] No savegame stream present"); - // Load the last entry _savegame->seek(header.offsetEntry); -- cgit v1.2.3 From a92ecf7b5388c03cd9e899645da2430caaf89e60 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Fri, 27 Nov 2015 22:30:52 +0100 Subject: AGI: Removed excess check --- engines/agi/wagparser.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engines/agi/wagparser.cpp b/engines/agi/wagparser.cpp index 0b49866531..54f8eaf90b 100644 --- a/engines/agi/wagparser.cpp +++ b/engines/agi/wagparser.cpp @@ -79,7 +79,7 @@ bool WagProperty::read(Common::SeekableReadStream &stream) { uint32 readBytes = stream.read(_propData, _propSize); // Read the data in _propData[_propSize] = 0; // Set the trailing zero for easy C-style string access - _readOk = (_propData != NULL && readBytes == _propSize); // Check that we got the whole data + _readOk = (readBytes == _propSize); // Check that we got the whole data return _readOk; } -- cgit v1.2.3 From 9033f8db13b117fd8a78142cb244835d99777310 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Fri, 27 Nov 2015 22:41:39 +0100 Subject: MADS: Shut gcc warning. Requires checking --- engines/mads/phantom/game_phantom.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/engines/mads/phantom/game_phantom.cpp b/engines/mads/phantom/game_phantom.cpp index af2102b18f..27849cce1e 100644 --- a/engines/mads/phantom/game_phantom.cpp +++ b/engines/mads/phantom/game_phantom.cpp @@ -432,7 +432,7 @@ void GamePhantom::doObjectAction() { _vm->_dialogs->showItem(OBJ_BOOK, 815, 0); action._inProgress = false; return; - } + } if (action.isAction(VERB_LOOK, NOUN_CRUMPLED_NOTE) || action.isAction(VERB_READ, NOUN_CRUMPLED_NOTE)) { _vm->_dialogs->showItem(OBJ_CRUMPLED_NOTE, 816, 6); @@ -870,6 +870,10 @@ void GamePhantom::setupCatacombs() { _globals[kCatacombs501From] = 0; break; + case DIFFICULTY_MEDIUM: + // TODO: FIXME. Do we need to set something here? + break; + case DIFFICULTY_HARD: _catacombs = _hardCatacombs; _catacombSize = 62; @@ -924,7 +928,7 @@ void GamePhantom::newCatacombRoom(int toRoom, int fromExit) { default: error("Unexpected room in newCatacombRoom"); - } + } } else { newSceneNum = _catacombs[toRoom]._sceneNum; _globals[81] = _catacombs[toRoom]._flags; -- cgit v1.2.3 From 46dc9a89c3e876e88786b0f20bbcb9cf8acba5bb Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Fri, 27 Nov 2015 22:41:59 +0100 Subject: MADS: Fix warning. Requires consulting with the original --- engines/mads/phantom/phantom_scenes1.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engines/mads/phantom/phantom_scenes1.cpp b/engines/mads/phantom/phantom_scenes1.cpp index 7bc9c179b9..c86d2852c7 100644 --- a/engines/mads/phantom/phantom_scenes1.cpp +++ b/engines/mads/phantom/phantom_scenes1.cpp @@ -6220,7 +6220,7 @@ void Scene110::actions() { if (_action.isAction(VERB_WALK_THROUGH, NOUN_RIGHT_DOOR) || _action.isAction(VERB_OPEN, NOUN_RIGHT_DOOR) || _action.isAction(VERB_UNLOCK, NOUN_RIGHT_DOOR) || _action.isAction(VERB_LOCK, NOUN_RIGHT_DOOR)) { - if ((_globals[kCurrentYear] == 1881) || (_globals[kDoneBrieConv203] >= 1) + if (((_globals[kCurrentYear] == 1881) || (_globals[kDoneBrieConv203] >= 1)) && !_action.isAction(VERB_UNLOCK, NOUN_RIGHT_DOOR) && !_action.isAction(VERB_LOCK, NOUN_RIGHT_DOOR)) { switch (_game._trigger) { case (0): -- cgit v1.2.3 From 98559576977aaf020739e596f9440e81aa7d06fa Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Fri, 27 Nov 2015 22:44:20 +0100 Subject: MADS: Fixing parenthesis. Requires checking with the original --- engines/mads/phantom/phantom_scenes2.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/engines/mads/phantom/phantom_scenes2.cpp b/engines/mads/phantom/phantom_scenes2.cpp index 1590d06549..eff0bf8db9 100644 --- a/engines/mads/phantom/phantom_scenes2.cpp +++ b/engines/mads/phantom/phantom_scenes2.cpp @@ -4580,9 +4580,9 @@ void Scene205::actions() { } if ((_action.isAction(VERB_ENTER)) || (_action.isAction(VERB_OPEN)) || _action.isAction(VERB_UNLOCK) || _action.isAction(VERB_LOCK)) { - if (((_action.isObject(NOUN_BOX_FIVE)) && ((_globals[kDoorsIn205] == 0) || (_globals[kDoorsIn205] == 2)) + if (((_action.isObject(NOUN_BOX_FIVE) && ((_globals[kDoorsIn205] == 0) || (_globals[kDoorsIn205] == 2))) || _action.isAction(VERB_UNLOCK) || _action.isAction(VERB_LOCK)) - || ((_action.isObject(NOUN_BOX_NINE)) && ((_globals[kDoorsIn205] == 0) || (_globals[kDoorsIn205] == 1))) + || ((_action.isObject(NOUN_BOX_NINE) && ((_globals[kDoorsIn205] == 0) || (_globals[kDoorsIn205] == 1)))) || (_action.isObject(NOUN_BOX_SIX)) || (_action.isObject(NOUN_BOX_SEVEN)) || (_action.isObject(NOUN_BOX_EIGHT))) { switch (_game._trigger) { case (0): -- cgit v1.2.3 From 8f3d528b7efba1b3c86a5a4934eae5ace78459a9 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Fri, 27 Nov 2015 22:49:18 +0100 Subject: AGI: Better pointer checking --- engines/agi/words.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/engines/agi/words.cpp b/engines/agi/words.cpp index ff9049fdc5..438c1ce354 100644 --- a/engines/agi/words.cpp +++ b/engines/agi/words.cpp @@ -161,11 +161,13 @@ void AgiEngine::dictionaryWords(char *msg) { char *q = NULL; int wid, wlen; + assert(msg); + debugC(2, kDebugLevelScripts, "msg = \"%s\"", msg); cleanInput(); - for (p = msg; p && *p && getvar(vWordNotFound) == 0;) { + for (p = msg; *p && getvar(vWordNotFound) == 0;) { if (*p == 0x20) p++; @@ -205,7 +207,7 @@ void AgiEngine::dictionaryWords(char *msg) { break; } - if (p != NULL && *p) { + if (*p) { debugC(2, kDebugLevelScripts, "p = %s", p); *p = 0; p++; -- cgit v1.2.3 From 48e048be8d888c6c52140eeedac2742f5b1319cb Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Fri, 27 Nov 2015 22:54:13 +0100 Subject: WINTERMUTE: More sanity checks --- engines/wintermute/ad/ad_game.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engines/wintermute/ad/ad_game.cpp b/engines/wintermute/ad/ad_game.cpp index 3c4383f55e..df0328ce5e 100644 --- a/engines/wintermute/ad/ad_game.cpp +++ b/engines/wintermute/ad/ad_game.cpp @@ -2261,7 +2261,7 @@ bool AdGame::onMouseRightUp() { bool AdGame::displayDebugInfo() { char str[100]; if (_gameRef->_debugDebugMode) { - sprintf(str, "Mouse: %d, %d (scene: %d, %d)", _mousePos.x, _mousePos.y, _mousePos.x + _scene->getOffsetLeft(), _mousePos.y + _scene->getOffsetTop()); + sprintf(str, "Mouse: %d, %d (scene: %d, %d)", _mousePos.x, _mousePos.y, _mousePos.x + (_scene ? _scene->getOffsetLeft() : 0), _mousePos.y + (_scene ? _scene->getOffsetTop() : 0)); _systemFont->drawText((byte *)str, 0, 90, _renderer->getWidth(), TAL_RIGHT); sprintf(str, "Scene: %s (prev: %s)", (_scene && _scene->getName()) ? _scene->getName() : "???", _prevSceneName ? _prevSceneName : "???"); -- cgit v1.2.3 From 401518a3dc4b55482fa28bfb066d8255454c39cc Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Fri, 27 Nov 2015 22:57:23 +0100 Subject: WINTERMUTE: Proper place for pointer check --- engines/wintermute/base/file/base_save_thumb_file.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/engines/wintermute/base/file/base_save_thumb_file.cpp b/engines/wintermute/base/file/base_save_thumb_file.cpp index acd5363e89..54f7ee7c62 100644 --- a/engines/wintermute/base/file/base_save_thumb_file.cpp +++ b/engines/wintermute/base/file/base_save_thumb_file.cpp @@ -70,11 +70,12 @@ bool BaseSaveThumbFile::open(const Common::String &filename) { delete[] tempFilename; BasePersistenceManager *pm = new BasePersistenceManager(); - Common::String slotFilename = pm->getFilenameForSlot(slot); if (!pm) { return STATUS_FAILED; } + Common::String slotFilename = pm->getFilenameForSlot(slot); + if (DID_FAIL(pm->initLoad(slotFilename))) { delete pm; return STATUS_FAILED; -- cgit v1.2.3 From a6ca2ec6d02bd7f5075ce1e1ffc15973d0da6970 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Fri, 27 Nov 2015 23:02:30 +0100 Subject: ACCESS: Adding missing comma --- engines/access/resources.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/engines/access/resources.cpp b/engines/access/resources.cpp index c11dbf6331..096fb15b35 100644 --- a/engines/access/resources.cpp +++ b/engines/access/resources.cpp @@ -74,7 +74,7 @@ bool Resources::load(Common::String &errorMessage) { // Load in the data for the game load(f); - + return true; } @@ -147,7 +147,7 @@ uint Resources::findEntry(byte gameId, byte discType, byte demoType, Common::Lan Common::String Resources::readString(Common::SeekableReadStream &s) { Common::String result; char c; - + while ((c = s.readByte()) != 0) result += c; @@ -180,14 +180,14 @@ const byte INITIAL_PALETTE[18 * 3] = { const char *const GENERAL_MESSAGES[] = { "LOOKING THERE REVEALS NOTHING OF INTEREST.", // LOOK_MESSAGE "THAT DOESN'T OPEN.", // OPEN_MESSAGE - "THAT WON'T MOVE." // MOVE_MESSAGE + "THAT WON'T MOVE.", // MOVE_MESSAGE "YOU CAN'T TAKE THAT.", // GET_MESSAGE "THAT DOESN'T SEEM TO WORK.", // USE_MESSAGE "YOU CAN'T CLIMB THAT.", // GO_MESSAGE "THERE SEEMS TO BE NO RESPONSE.", // TALK_MESSAGE "THIS OBJECT REQUIRES NO HINTS", // HELP_MESSAGE "THIS OBJECT REQUIRES NO HINTS", // HELP_MESSAGE - "THAT DOESN'T SEEM TO WORK.", // USE_MESSAGE + "THAT DOESN'T SEEM TO WORK." // USE_MESSAGE }; const int INVCOORDS[][4] = { -- cgit v1.2.3 From 5675fa7b7fd751c0699cb944258e608e5ae68b74 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Fri, 27 Nov 2015 23:07:02 +0100 Subject: SCUMM: Enforcing numbers to double --- engines/scumm/players/player_v2.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engines/scumm/players/player_v2.cpp b/engines/scumm/players/player_v2.cpp index f0aaa4a3be..c7ebd8abff 100644 --- a/engines/scumm/players/player_v2.cpp +++ b/engines/scumm/players/player_v2.cpp @@ -77,7 +77,7 @@ void Player_V2::setMusicVolume (int vol) { vol = 255; /* scale to int16, FIXME: find best value */ - double out = vol * 128 / 3; + double out = vol * 128.0 / 3.0; /* build volume table (2dB per step) */ for (int i = 0; i < 15; i++) { -- cgit v1.2.3 From ccd82145a46607438fa395a3109d555e1097262d Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Fri, 27 Nov 2015 23:08:50 +0100 Subject: HE: Proper cast to double to avoid integer division --- engines/scumm/he/logic/puttrace.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engines/scumm/he/logic/puttrace.cpp b/engines/scumm/he/logic/puttrace.cpp index 1c3317b131..ba62c118fe 100644 --- a/engines/scumm/he/logic/puttrace.cpp +++ b/engines/scumm/he/logic/puttrace.cpp @@ -256,7 +256,7 @@ int32 LogicHErace::op_1102(int32 *args) { } int32 LogicHErace::op_1103(int32 *args) { - double angle = args[0] / args[1] * DEG2RAD; + double angle = (double)args[0] / (double)args[1] * DEG2RAD; writeScummVar(108, (int32)(sin(angle) * args[2])); writeScummVar(109, (int32)(cos(angle) * args[2])); -- cgit v1.2.3 From f1c982586303db745b034eb123d6f56c300de44c Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Fri, 27 Nov 2015 17:52:57 -0500 Subject: ACCESS: Fix redrawing buttons after changing selection --- engines/access/room.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/engines/access/room.cpp b/engines/access/room.cpp index 759af74cff..8a5526e310 100644 --- a/engines/access/room.cpp +++ b/engines/access/room.cpp @@ -706,6 +706,7 @@ void Room::executeCommand(int commandId) { delete iconData; // Draw the button as selected + roomMenu(); _vm->_screen->plotImage(spr, _selectCommand + 2, Common::Point(_rMouse[_selectCommand][0], (_vm->getGameID() == GType_MartianMemorandum) ? 184 : 176)); -- cgit v1.2.3 From 7a21929e08cf2b50b06ba9e7372f10b1d6a956b0 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Fri, 27 Nov 2015 23:28:50 +0100 Subject: FULLPIPE: Fix cursor comparison --- engines/fullpipe/scenes/scene04.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engines/fullpipe/scenes/scene04.cpp b/engines/fullpipe/scenes/scene04.cpp index c0f0960aba..6c361d6f1a 100644 --- a/engines/fullpipe/scenes/scene04.cpp +++ b/engines/fullpipe/scenes/scene04.cpp @@ -238,7 +238,7 @@ int scene04_updateCursor() { } } - if (g_fp->_objectIdAtCursor == PIC_CSR_ITN && g_fp->_objectIdAtCursor == PIC_SC4_DOWNTRUBA) + if (g_fp->_cursorId == PIC_CSR_ITN && g_fp->_objectIdAtCursor == PIC_SC4_DOWNTRUBA) g_fp->_cursorId = PIC_CSR_GOD; return g_fp->_cursorId; -- cgit v1.2.3 From 34a1d7aaaadf0aae731d57e324955dfbcc3a9986 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Fri, 27 Nov 2015 23:37:27 +0100 Subject: AGI: Improve debug output --- engines/agi/sound_2gs.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engines/agi/sound_2gs.cpp b/engines/agi/sound_2gs.cpp index b940eed762..b221afbc23 100644 --- a/engines/agi/sound_2gs.cpp +++ b/engines/agi/sound_2gs.cpp @@ -345,7 +345,7 @@ void SoundGen2GS::advanceMidiPlayer() { case MIDI_PITCH_WHEEL: parm1 = *p++; parm2 = *p++; - debugC(3, kDebugLevelSound, "channel %X: pitch wheel (unimplemented)", chn); + debugC(3, kDebugLevelSound, "channel %X: pitch wheel (unimplemented) %02X, %02X", chn, parm1, parm2); break; default: -- cgit v1.2.3 From b7735b020fa03219d96d3dce44b508d1da6dbc96 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Fri, 27 Nov 2015 23:59:56 +0100 Subject: TESTBED: Added safety check --- engines/testbed/testsuite.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/engines/testbed/testsuite.cpp b/engines/testbed/testsuite.cpp index 7729c4911b..853f1288b3 100644 --- a/engines/testbed/testsuite.cpp +++ b/engines/testbed/testsuite.cpp @@ -283,6 +283,9 @@ void Testsuite::execute() { pt.y += getLineSeparation(); int numEnabledTests = getNumTestsEnabled(); + if (!numEnabledTests) + return; + for (Common::Array::iterator i = _testsToExecute.begin(); i != _testsToExecute.end(); ++i) { if (!(*i)->enabled) { logPrintf("Info! Skipping Test: %s, Skipped by configuration.\n", ((*i)->featureName).c_str()); -- cgit v1.2.3 From deb7623fbff4b4d7c993facc4bec43a7509b6da4 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Sat, 28 Nov 2015 00:03:49 +0100 Subject: SCUMM: Add safety check --- engines/scumm/dialogs.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/engines/scumm/dialogs.cpp b/engines/scumm/dialogs.cpp index c22525b6f2..21c7428621 100644 --- a/engines/scumm/dialogs.cpp +++ b/engines/scumm/dialogs.cpp @@ -308,6 +308,8 @@ void HelpDialog::reflowLayout() { int16 x, y; uint16 w, h; + assert(lineHeight); + g_gui.xmlEval()->getWidgetData("ScummHelp.HelpText", x, y, w, h); // Make sure than we don't have more lines than what we can fit -- cgit v1.2.3 From d33c444f050404ea423fa011fc036b43e132ff95 Mon Sep 17 00:00:00 2001 From: Kirben Date: Sat, 28 Nov 2015 10:14:13 +1100 Subject: BUILD: Add access.dat to resource file for Windows builds. --- dists/scummvm.rc | 3 +++ dists/scummvm.rc.in | 3 +++ 2 files changed, 6 insertions(+) diff --git a/dists/scummvm.rc b/dists/scummvm.rc index 2028a5bfd3..fbf2f44434 100644 --- a/dists/scummvm.rc +++ b/dists/scummvm.rc @@ -20,6 +20,9 @@ scummmodern.zip FILE "gui/themes/scummmodern.zip" translations.dat FILE "gui/themes/translations.dat" #endif +#if ENABLE_ACCESS == STATIC_PLUGIN +access.dat FILE "dists/engine-data/access.dat" +#endif #if ENABLE_DRASCULA == STATIC_PLUGIN drascula.dat FILE "dists/engine-data/drascula.dat" #endif diff --git a/dists/scummvm.rc.in b/dists/scummvm.rc.in index 3a619334d5..fc68f95a95 100644 --- a/dists/scummvm.rc.in +++ b/dists/scummvm.rc.in @@ -20,6 +20,9 @@ scummmodern.zip FILE "gui/themes/scummmodern.zip" translations.dat FILE "gui/themes/translations.dat" #endif +#if ENABLE_ACCESS == STATIC_PLUGIN +access.dat FILE "dists/engine-data/access.dat" +#endif #if ENABLE_DRASCULA == STATIC_PLUGIN drascula.dat FILE "dists/engine-data/drascula.dat" #endif -- cgit v1.2.3 From b9fc8cf746eb1ddadc3db4fd4630364826dab7d5 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Sat, 28 Nov 2015 00:18:32 +0100 Subject: TESTBED: Sanity check --- engines/testbed/testbed.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/engines/testbed/testbed.cpp b/engines/testbed/testbed.cpp index 635fd09bac..885429cafd 100644 --- a/engines/testbed/testbed.cpp +++ b/engines/testbed/testbed.cpp @@ -152,6 +152,9 @@ void TestbedEngine::invokeTestsuites(TestbedConfigManager &cfMan) { Common::Point pt = Testsuite::getDisplayRegionCoordinates(); int numSuitesEnabled = cfMan.getNumSuitesEnabled(); + if (!numSuitesEnabled) + return; + for (iter = _testsuiteList.begin(); iter != _testsuiteList.end(); iter++) { if (shouldQuit()) { return; -- cgit v1.2.3 From 4e415c3fefc3a724958209f01839edb6a2fe4e0f Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Fri, 27 Nov 2015 18:56:44 -0500 Subject: ACCESS: Fix loading character data in English demo --- engines/access/char.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engines/access/char.cpp b/engines/access/char.cpp index 76dfca6df0..3e95208fe5 100644 --- a/engines/access/char.cpp +++ b/engines/access/char.cpp @@ -31,7 +31,7 @@ CharEntry::CharEntry(const byte *data, AccessEngine *vm) { Common::MemoryReadStream s(data, 999); _charFlag = s.readByte(); - if (vm->getGameID() == GType_MartianMemorandum) { + if (vm->getGameID() != GType_Amazon || vm->isDemo()) { _screenFile.load(s); _estabIndex = s.readSint16LE(); } else { -- cgit v1.2.3 From e8aa00c9751c554e46bde5f74d0bab821d496a31 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Fri, 27 Nov 2015 19:13:36 -0500 Subject: ACCESS: Fix crash in demo when changing scene --- engines/access/scripts.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engines/access/scripts.cpp b/engines/access/scripts.cpp index 12328566fc..25b8c97be5 100644 --- a/engines/access/scripts.cpp +++ b/engines/access/scripts.cpp @@ -164,7 +164,7 @@ void Scripts::charLoop() { _sequence = 2000; searchForSequence(); _vm->_images.clear(); - _vm->_buffer2.blitFrom(_vm->_buffer1); + _vm->_buffer2.copyBlock(&_vm->_buffer1, Common::Rect(0, 0, _vm->_buffer2.w, _vm->_buffer2.h)); _vm->_newRects.clear(); executeScript(); -- cgit v1.2.3 From 4998a574efe1a3aad301bff8c841b1dff2e2c26c Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Sun, 29 Nov 2015 12:49:50 +0100 Subject: BUILD: Add access.dat to DIST_FILES_ENGINEDATA --- Makefile.common | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Makefile.common b/Makefile.common index 993b833f4e..df24d397de 100644 --- a/Makefile.common +++ b/Makefile.common @@ -246,6 +246,9 @@ DIST_FILES_THEMES:=$(addprefix $(srcdir)/gui/themes/,$(DIST_FILES_THEMES)) # Engine data files DIST_FILES_ENGINEDATA= +ifdef ENABLE_ACCESS +DIST_FILES_ENGINEDATA+=access.dat +endif ifdef ENABLE_DRASCULA DIST_FILES_ENGINEDATA+=drascula.dat endif -- cgit v1.2.3 From 7ce6a2d89accb2c1a146b8579d3c86f36471f48e Mon Sep 17 00:00:00 2001 From: Martin Kiewitz Date: Mon, 30 Nov 2015 19:17:13 +0100 Subject: ACCESS: video player: initialize variable also remove another unused variable --- engines/access/video/movie_decoder.cpp | 1 + engines/access/video/movie_decoder.h | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/engines/access/video/movie_decoder.cpp b/engines/access/video/movie_decoder.cpp index b9e252d610..05ec25d54c 100644 --- a/engines/access/video/movie_decoder.cpp +++ b/engines/access/video/movie_decoder.cpp @@ -372,6 +372,7 @@ AccessVIDMovieDecoder::StreamVideoTrack::StreamVideoTrack(uint32 width, uint32 h _curFrame = -1; _nextFrameStartTime = 0; _endOfTrack = false; + _dirtyPalette = false; memset(&_palette, 0, sizeof(_palette)); diff --git a/engines/access/video/movie_decoder.h b/engines/access/video/movie_decoder.h index dc4a87720c..fe8a89fcde 100644 --- a/engines/access/video/movie_decoder.h +++ b/engines/access/video/movie_decoder.h @@ -143,7 +143,6 @@ private: private: int16 decodeSample(uint8 dataNibble); - uint32 _codecTag; uint16 _sampleRate; bool _stereo; }; -- cgit v1.2.3 From 93b2a2e5c65de34029bc1b8bde18f2c98cb8e4b7 Mon Sep 17 00:00:00 2001 From: Torbjörn Andersson Date: Mon, 30 Nov 2015 22:21:35 +0100 Subject: TIMIDITY: Fix resource leak (CID 1003919) --- backends/midi/timidity.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/backends/midi/timidity.cpp b/backends/midi/timidity.cpp index d10b808bdb..497138850a 100644 --- a/backends/midi/timidity.cpp +++ b/backends/midi/timidity.cpp @@ -316,6 +316,7 @@ int MidiDriver_TIMIDITY::connect_to_server(const char* hostname, unsigned short if (connect(fd, (struct sockaddr *)&in, sizeof(in)) < 0) { warning("TiMidity: connect(): %s", strerror(errno)); + ::close(fd); return -1; } -- cgit v1.2.3 From 1c841094fa68af4b2797d3f06d7ffbcffb8ac85a Mon Sep 17 00:00:00 2001 From: Torbjörn Andersson Date: Mon, 30 Nov 2015 22:39:54 +0100 Subject: BBVS: Use memmove(), not memcpy(), for overlapping memory areas CID 1230310. This fixes the credits easter eggs for me. --- engines/bbvs/bbvs.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engines/bbvs/bbvs.cpp b/engines/bbvs/bbvs.cpp index 1d668f9c34..816b713b1f 100644 --- a/engines/bbvs/bbvs.cpp +++ b/engines/bbvs/bbvs.cpp @@ -1384,7 +1384,7 @@ void BbvsEngine::checkEasterEgg(char key) { }; if (_currSceneNum == kCredits) { - memcpy(&_easterEggInput[1], &_easterEggInput[0], 6); + memmove(&_easterEggInput[1], &_easterEggInput[0], 6); _easterEggInput[0] = key; for (int i = 0; i < ARRAYSIZE(kEasterEggStrings); ++i) { if (!scumm_strnicmp(kEasterEggStrings[i], _easterEggInput, kEasterEggLengths[i])) { -- cgit v1.2.3 From 7449c09f4a637bfb23b4507de70a7344c1a41860 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Mon, 30 Nov 2015 23:48:48 +0100 Subject: SWORD25: Init variables --- engines/sword25/gfx/animation.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/engines/sword25/gfx/animation.cpp b/engines/sword25/gfx/animation.cpp index e2662fb2b3..541c44662b 100644 --- a/engines/sword25/gfx/animation.cpp +++ b/engines/sword25/gfx/animation.cpp @@ -119,6 +119,10 @@ void Animation::initMembers() { _animationResourcePtr = 0; _animationTemplateHandle = 0; _framesLocked = false; + + _loopPointCallback = 0; + _actionCallback = 0; + _deleteCallback = 0; } Animation::~Animation() { -- cgit v1.2.3 From 3a574272b83cadf175cfb50a42fef0a126116ac6 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Mon, 30 Nov 2015 23:54:09 +0100 Subject: SWORD25: Remove unused class variable --- engines/sword25/gfx/graphicengine.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/engines/sword25/gfx/graphicengine.h b/engines/sword25/gfx/graphicengine.h index cf4289b8bb..cca87b491c 100644 --- a/engines/sword25/gfx/graphicengine.h +++ b/engines/sword25/gfx/graphicengine.h @@ -310,8 +310,6 @@ private: uint _frameTimeSampleSlot; private: - byte *_backBuffer; - RenderObjectPtr _mainPanelPtr; Common::ScopedPtr _renderObjectManagerPtr; -- cgit v1.2.3 From 2e3ecb1be89e7744f1a4dff6309404f0833407ec Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 1 Dec 2015 20:23:29 -0500 Subject: SHERLOCK: SS: Fix crash moving box at Tabbacconists --- engines/sherlock/talk.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/engines/sherlock/talk.cpp b/engines/sherlock/talk.cpp index e9c52276f6..b239fd9fb7 100644 --- a/engines/sherlock/talk.cpp +++ b/engines/sherlock/talk.cpp @@ -994,6 +994,10 @@ OpcodeReturn Talk::cmdAdjustObjectSequence(const byte *&str) { _seqCount = str[1]; str += (str[0] & 127) + 2; + // WORKAROUND: Original German Scalpel crash when moving box at Tobacconists + if (_vm->getLanguage() == Common::DE_DEU && _scriptName == "Alfr30Z") + _seqCount = 16; + // Copy in the new sequence for (int idx = 0; idx < _seqCount; ++idx, ++str) scene._bgShapes[objId]._sequences[idx] = str[0] - 1; -- cgit v1.2.3 From bf4ab6d52af065b424ec29e1fb8205527af5a060 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 1 Dec 2015 21:48:14 -0500 Subject: TINSEL: Remove redundant assert check in SetHookScene In the original, a second SetHookScene call can validly occur due to first placing the cover-switched book in the bookcase, and then by the thief leaving if his arrival happens immediately. --- engines/tinsel/tinsel.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/engines/tinsel/tinsel.cpp b/engines/tinsel/tinsel.cpp index 6dc8e3bb35..77932a5cdf 100644 --- a/engines/tinsel/tinsel.cpp +++ b/engines/tinsel/tinsel.cpp @@ -528,8 +528,6 @@ void SetNewScene(SCNHANDLE scene, int entrance, int transition) { * Store a scene as hooked */ void SetHookScene(SCNHANDLE scene, int entrance, int transition) { - assert(g_HookScene.scene == 0); // scene already hooked - g_HookScene.scene = scene; g_HookScene.entry = entrance; g_HookScene.trans = transition; -- cgit v1.2.3 From 427850b78dc4cf6cf7d6c8a666ba9f9b45c39dfb Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 2 Dec 2015 11:41:55 +0100 Subject: VOYEUR: Remove useless global variable --- engines/voyeur/voyeur.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/engines/voyeur/voyeur.cpp b/engines/voyeur/voyeur.cpp index dad634c9bb..cbb6846340 100644 --- a/engines/voyeur/voyeur.cpp +++ b/engines/voyeur/voyeur.cpp @@ -33,8 +33,6 @@ namespace Voyeur { -VoyeurEngine *g_vm; - VoyeurEngine::VoyeurEngine(OSystem *syst, const VoyeurGameDescription *gameDesc) : Engine(syst), _gameDescription(gameDesc), _randomSource("Voyeur"), _defaultFontInfo(3, 0xff, 0xff, 0, 0, ALIGN_LEFT, 0, Common::Point(), 1, 1, -- cgit v1.2.3 From a6a9315d6e0db500d9be2508b038b84cb6d4bc98 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 2 Dec 2015 21:13:12 -0500 Subject: ACCESS: Fix corruption of scrolling screen when using ui buttons --- engines/access/room.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/engines/access/room.cpp b/engines/access/room.cpp index 8a5526e310..9a6efd32fc 100644 --- a/engines/access/room.cpp +++ b/engines/access/room.cpp @@ -611,6 +611,7 @@ void Room::handleCommand(int commandId) { void Room::executeCommand(int commandId) { EventsManager &events = *_vm->_events; + Screen &screen = *_vm->_screen; _selectCommand = commandId; if (_vm->getGameID() == GType_MartianMemorandum) { @@ -697,8 +698,8 @@ void Room::executeCommand(int commandId) { break; } } - _vm->_screen->saveScreen(); - _vm->_screen->setDisplayScan(); + screen.saveScreen(); + screen.setDisplayScan(); // Get the toolbar icons resource Resource *iconData = _vm->_files->loadFile("ICONS.LZ"); @@ -706,8 +707,9 @@ void Room::executeCommand(int commandId) { delete iconData; // Draw the button as selected - roomMenu(); - _vm->_screen->plotImage(spr, _selectCommand + 2, + screen.plotImage(spr, 0, Common::Point(0, 177)); + screen.plotImage(spr, 1, Common::Point(143, 177)); + screen.plotImage(spr, _selectCommand + 2, Common::Point(_rMouse[_selectCommand][0], (_vm->getGameID() == GType_MartianMemorandum) ? 184 : 176)); _vm->_screen->restoreScreen(); -- cgit v1.2.3 From cc497fb8dcd6bfb3de1d8844b8d25a0783ae0aac Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 2 Dec 2015 21:49:56 -0500 Subject: ACCESS: Explicit cast in figuring out fade out pixel values --- engines/access/screen.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 364b0a7eef..e6d43d0156 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -181,7 +181,7 @@ void Screen::forceFadeOut() { int v = *srcP; if (v) { repeatFlag = true; - *srcP = MAX(*srcP - FADE_AMOUNT, 0); + *srcP = MAX((int)*srcP - FADE_AMOUNT, 0); } } -- cgit v1.2.3 From 13b7fecab289581ddf9f7537dbc043183049ba49 Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Thu, 3 Dec 2015 10:55:48 +0100 Subject: WIN32: Don't install QUICKSTART file The English version is only intended as a template for translation; not for installing. See FR#699. --- dists/win32/ScummVM.iss | 2 -- 1 file changed, 2 deletions(-) diff --git a/dists/win32/ScummVM.iss b/dists/win32/ScummVM.iss index 5afb407177..c156ab6ca1 100644 --- a/dists/win32/ScummVM.iss +++ b/dists/win32/ScummVM.iss @@ -53,7 +53,6 @@ Name: {group}\Copyright; Filename: {app}\COPYRIGHT.txt; WorkingDir: {app}; Comme Name: {group}\News; Filename: {app}\NEWS.txt; WorkingDir: {app}; Comment: NEWS; Flags: createonlyiffileexists; Languages: not de Name: {group}\Neues; Filename: {app}\Neues.txt; WorkingDir: {app}; Comment: Neues; Flags: createonlyiffileexists; Languages: de ;QUICKSTART -Name: {group}\QuickStart; Filename: {app}\QUICKSTART.txt; WorkingDir: {app}; Comment: QUICKSTART; Flags: createonlyiffileexists; Languages: not (de or es or fr or it or nb or se) Name: {group}\Schnellstart; Filename: {app}\Schnellstart.txt; WorkingDir: {app}; Comment: Schnellstart; Flags: createonlyiffileexists; Languages: de Name: {group}\InicioRapido; Filename: {app}\InicioRapido.txt; WorkingDir: {app}; Comment: InicioRapido; Flags: createonlyiffileexists; Languages: es Name: {group}\DemarrageRapide; Filename: {app}\DemarrageRapide.txt; WorkingDir: {app}; Comment: DemarrageRapide; Flags: createonlyiffileexists; Languages: fr @@ -93,7 +92,6 @@ Source: COPYRIGHT.txt; DestDir: {app}; Flags: ignoreversion Source: NEWS.txt; DestDir: {app}; Flags: ignoreversion; Languages: not de Source: doc/de/Neues.txt; DestDir: {app}; Flags: ignoreversion; Languages: de ;QUICKSTART -Source: doc/QUICKSTART.txt; DestDir: {app}; Flags: ignoreversion isreadme; Languages: not (de or es or fr or it or nb or se) Source: doc/de/Schnellstart.txt; DestDir: {app}; Flags: ignoreversion isreadme; Languages: de Source: doc/es/InicioRapido.txt; DestDir: {app}; Flags: ignoreversion isreadme; Languages: es Source: doc/fr/DemarrageRapide.txt; DestDir: {app}; Flags: ignoreversion isreadme; Languages: fr -- cgit v1.2.3 From 9cdcce6bc68190d04bc65cb443606092487f81a3 Mon Sep 17 00:00:00 2001 From: Fedor Date: Thu, 3 Dec 2015 23:31:20 +0300 Subject: Symbian: add Sherlock engine support --- backends/platform/symbian/AdaptAllMMPs.pl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/backends/platform/symbian/AdaptAllMMPs.pl b/backends/platform/symbian/AdaptAllMMPs.pl index 6b9f918a51..a836b764d2 100644 --- a/backends/platform/symbian/AdaptAllMMPs.pl +++ b/backends/platform/symbian/AdaptAllMMPs.pl @@ -56,6 +56,7 @@ chdir("../../../"); "mmp/scummvm_lastexpress.mmp", "mmp/scummvm_mads.mmp", "mmp/scummvm_prince.mmp", + "mmp/scummvm_sherlock.mmp", "mmp/scummvm_sword25.mmp", "mmp/scummvm_testbed.mmp", "mmp/scummvm_zvision.mmp", @@ -203,6 +204,7 @@ ParseModule("_lastexpress","lastexpress", \@section_empty); ParseModule("_m4", "m4", \@section_empty); ParseModule("_mads" ,"mads", \@section_empty); ParseModule("_prince" ,"prince", \@section_empty); +ParseModule("_sherlock" ,"sherlock", \@section_empty); ParseModule("_sword25" ,"sword25", \@section_empty); ParseModule("_testbed" ,"testbed", \@section_empty); ParseModule("_zvision" ,"zvision", \@section_empty); -- cgit v1.2.3 From 84c516d47a3a05071eb3d2c3e8949a62448a58d6 Mon Sep 17 00:00:00 2001 From: Fedor Date: Thu, 3 Dec 2015 23:43:22 +0300 Subject: Symbian: cleanup build script Add missed engines, all engines ordered by names, simplified and clear comments--- .../symbian/BuildPackageUpload_LocalSettings.pl | 42 ++++++++++------------ 1 file changed, 19 insertions(+), 23 deletions(-) diff --git a/backends/platform/symbian/BuildPackageUpload_LocalSettings.pl b/backends/platform/symbian/BuildPackageUpload_LocalSettings.pl index 8c19631524..10bcf0340a 100644 --- a/backends/platform/symbian/BuildPackageUpload_LocalSettings.pl +++ b/backends/platform/symbian/BuildPackageUpload_LocalSettings.pl @@ -1,36 +1,32 @@ ################################################################################################################## +#### sword25 ignored because of incompatible resolution 800*600 @WorkingEngines = qw( - agos agi cine cge composer cruise draci dreamweb - drascula hugo gob groovie hopkins kyra lastexpress - lure made mohawk mortevielle neverhood parallaction - pegasus queen saga sci scumm sky sword1 sword2 - teenagent tinsel toltecs tony toon touche tsage - tucker voyeur wintermute - access avalanche bbvs cge2 fullpipe mads prince - testbed zvision + access agi agos avalanche bbvs cge cge2 + cine composer cruise draci drascula + dreamweb fullpipe gob groovie hopkins + hugo kyra lastexpress lure made mads + mohawk mortevielle neverhood parallaction + pegasus prince queen saga sci scumm + sherlock sky sword1 sword2 teenagent + testbed tinsel toltecs tony toon touche + tsage tucker voyeur wintermute zvision ); - -#### sword25 yet not added - -#### In progress engines are : -#### access avalanche bbvs cge2 fullpipe mads prince -#### testbed zvision @WorkingEngines_1st = qw( - cine composer cruise drascula groovie - lastexpress made parallaction queen saga - scumm touche tucker wintermute voyeur - access avalanche cge2 zvision + access agi agos cge2 cine composer cruise + drascula gob groovie kyra lastexpress made + neverhood parallaction queen saga scumm + touche tucker voyeur wintermute ); @WorkingEngines_2nd = qw( - agi agos cge draci dreamweb gob hopkins - hugo kyra lure mohawk mortevielle neverhood - pegasus sci sky sword1 sword2 teenagent - tinsel tsage toltecs tony toon - bbvs fullpipe mads prince testbed + avalanche bbvs cge draci dreamweb fullpipe + hopkins hugo lure mads mohawk mortevielle + pegasus prince sci sherlock sky sword1 sword2 + teenagent testbed tinsel toltecs tony toon + tsage zvision ); #### sword25 yet not added -- cgit v1.2.3 From 1779fba59bb94b136be640834036df0f67881319 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Fri, 4 Dec 2015 11:52:46 +0100 Subject: SWORD25: Mark Sword 2.5 as testing --- engines/sword25/detection_tables.h | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/engines/sword25/detection_tables.h b/engines/sword25/detection_tables.h index 644b8ef366..b58f430fcf 100644 --- a/engines/sword25/detection_tables.h +++ b/engines/sword25/detection_tables.h @@ -29,7 +29,7 @@ static const ADGameDescription gameDescriptions[] = { AD_ENTRY1s("data.b25c", "f8b6e03ada2d2f6cf27fbc11ad1572e9", 654310588), Common::EN_ANY, Common::kPlatformUnknown, - ADGF_UNSTABLE, + ADGF_TESTING, GUIO1(GUIO_NOASPECT) }, { @@ -38,7 +38,7 @@ static const ADGameDescription gameDescriptions[] = { AD_ENTRY1s("lang_fr.b25c", "690caf157387e06d2c3d1ca53c43f428", 1006043), Common::FR_FRA, Common::kPlatformUnknown, - ADGF_UNSTABLE, + ADGF_TESTING, GUIO1(GUIO_NOASPECT) }, { @@ -47,7 +47,7 @@ static const ADGameDescription gameDescriptions[] = { AD_ENTRY1s("data.b25c", "f8b6e03ada2d2f6cf27fbc11ad1572e9", 654310588), Common::DE_DEU, Common::kPlatformUnknown, - ADGF_UNSTABLE, + ADGF_TESTING, GUIO1(GUIO_NOASPECT) }, { @@ -56,7 +56,7 @@ static const ADGameDescription gameDescriptions[] = { AD_ENTRY1s("lang_hr.b25c", "e881054d1f8ec1e527422fc521c25405", 1273217), Common::HR_HRV, Common::kPlatformUnknown, - ADGF_UNSTABLE, + ADGF_TESTING, GUIO1(GUIO_NOASPECT) }, { @@ -65,7 +65,7 @@ static const ADGameDescription gameDescriptions[] = { AD_ENTRY1s("lang_it.b25c", "f3325666da0515cc2b42062e953c0889", 996197), Common::IT_ITA, Common::kPlatformUnknown, - ADGF_UNSTABLE, + ADGF_TESTING, GUIO1(GUIO_NOASPECT) }, { @@ -74,7 +74,7 @@ static const ADGameDescription gameDescriptions[] = { AD_ENTRY1s("lang_pl.b25c", "49dc1a20f95391a808e475c49be2bac0", 1281799), Common::PL_POL, Common::kPlatformUnknown, - ADGF_UNSTABLE, + ADGF_TESTING, GUIO1(GUIO_NOASPECT) }, { @@ -83,7 +83,7 @@ static const ADGameDescription gameDescriptions[] = { AD_ENTRY1s("lang_pt.b25c", "1df701432f9e13dcefe1adeb890b9c69", 993812), Common::PT_BRA, Common::kPlatformUnknown, - ADGF_UNSTABLE, + ADGF_TESTING, GUIO1(GUIO_NOASPECT) }, { @@ -92,7 +92,7 @@ static const ADGameDescription gameDescriptions[] = { AD_ENTRY1s("lang_ru.b25c", "deb33dd2f90a71ff60181918a8ce5063", 1235378), Common::RU_RUS, Common::kPlatformUnknown, - ADGF_UNSTABLE, + ADGF_TESTING, GUIO1(GUIO_NOASPECT) }, { @@ -101,7 +101,7 @@ static const ADGameDescription gameDescriptions[] = { AD_ENTRY1s("lang_es.b25c", "384c19072d83725f351bb9ecb4d3f02b", 987965), Common::ES_ESP, Common::kPlatformUnknown, - ADGF_UNSTABLE, + ADGF_TESTING, GUIO1(GUIO_NOASPECT) }, // Hungarian "psylog" version. @@ -112,7 +112,7 @@ static const ADGameDescription gameDescriptions[] = { AD_ENTRY1s("lang_hu.b25c", "7de51a3b4926a192549e75b1a7d81667", 1864915), Common::HU_HUN, Common::kPlatformUnknown, - ADGF_UNSTABLE, + ADGF_TESTING, GUIO1(GUIO_NOASPECT) }, @@ -126,7 +126,7 @@ static const ADGameDescription gameDescriptions[] = { AD_LISTEND}, Common::EN_ANY, Common::kPlatformUnknown, - GF_EXTRACTED | ADGF_UNSTABLE, + GF_EXTRACTED | ADGF_TESTING, GUIO1(GUIO_NOASPECT) }, @@ -138,7 +138,7 @@ static const ADGameDescription gameDescriptions[] = { AD_ENTRY1s("data.b25c", "880a8a67faf4a4e7ab62cf114b771428", 827397764), Common::EN_ANY, Common::kPlatformUnknown, - ADGF_UNSTABLE, + ADGF_TESTING, GUIO1(GUIO_NOASPECT) }, -- cgit v1.2.3 From e215a75e7b314176fccb2b386db72a285d1af3fa Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Sat, 5 Dec 2015 08:03:36 +0100 Subject: AGI: stub for AGI1 newRoom() --- engines/agi/cycle.cpp | 20 +++++++++++++++----- engines/agi/op_cmd.cpp | 16 ---------------- engines/agi/opcodes.cpp | 4 ++-- engines/agi/opcodes.h | 2 -- 4 files changed, 17 insertions(+), 25 deletions(-) diff --git a/engines/agi/cycle.cpp b/engines/agi/cycle.cpp index 6b34605364..145b827160 100644 --- a/engines/agi/cycle.cpp +++ b/engines/agi/cycle.cpp @@ -84,13 +84,23 @@ void AgiEngine::newRoom(int n) { break; } - _game.vars[vBorderTouchEgo] = 0; - setflag(fNewRoomExec, true); + if (getVersion() < 0x2000) { + warning("STUB: NewRoom(%d)", n); - _game.exitAllLogics = true; + v->flags &= ~fDidntMove; + // animateObject(0); + agiLoadResource(rVIEW, _game.viewTable[0].currentView); + setView(&_game.viewTable[0], _game.viewTable[0].currentView); - writeStatus(); - writePrompt(); + } else { + _game.vars[vBorderTouchEgo] = 0; + setflag(fNewRoomExec, true); + + _game.exitAllLogics = true; + + writeStatus(); + writePrompt(); + } } void AgiEngine::resetControllers() { diff --git a/engines/agi/op_cmd.cpp b/engines/agi/op_cmd.cpp index 662454f3c1..bf2a2ed77b 100644 --- a/engines/agi/op_cmd.cpp +++ b/engines/agi/op_cmd.cpp @@ -1711,22 +1711,6 @@ void cmdCallV1(AgiGame *state, uint8 *p) { _v[13] = 1; } -void cmdNewRoomV1(AgiGame *state, uint8 *p) { - warning("cmdNewRoomV1()"); - state->_vm->agiLoadResource(rLOGIC, p0); - state->max_logics = 1; - state->logic_list[1] = p0; - _v[13] = 1; -} - -void cmdNewRoomVV1(AgiGame *state, uint8 *p) { - warning("cmdNewRoomVV1()"); - state->_vm->agiLoadResource(rLOGIC, _v[p0]); - state->max_logics = 1; - state->logic_list[1] = _v[p0]; - _v[13] = 1; -} - void cmdUnknown(AgiGame *state, uint8 *p) { warning("Skipping unknown opcode %2X", *(code + ip - 1)); } diff --git a/engines/agi/opcodes.cpp b/engines/agi/opcodes.cpp index 621fbb8e82..0d7d180ec9 100644 --- a/engines/agi/opcodes.cpp +++ b/engines/agi/opcodes.cpp @@ -60,7 +60,7 @@ AgiInstruction insV1[] = { { "subv", "vv", &cmdSubV }, // 08 { "load.view", "n", &cmdLoadView }, // 09 { "animate.obj", "n", &cmdAnimateObj }, // 0A - { "new.room", "n", &cmdNewRoomV1 }, // 0B + { "new.room", "n", &cmdNewRoom }, // 0B { "draw.pic", "v", &cmdDrawPicV1 }, // 0C { "print", "s", &cmdPrint }, // 0D TODO { "status", "", &cmdStatus }, // 0E TODO @@ -112,7 +112,7 @@ AgiInstruction insV1[] = { { "set.v", "v", &cmdSetV }, // 3C { "reset.v", "v", &cmdResetV }, // 3D { "toggle.v", "v", &cmdToggleV }, // 3E - { "new.room.v", "v", &cmdNewRoomVV1 }, // 3F TODO + { "new.room.v", "v", &cmdNewRoom }, // 3F { "call", "n", &cmdCallV1 }, // 40 TODO { "quit", "", &cmdQuitV1 }, // 41 { "set.speed", "v", &cmdSetSpeed }, // 42 diff --git a/engines/agi/opcodes.h b/engines/agi/opcodes.h index 6bd31c339a..5466bc6ee0 100644 --- a/engines/agi/opcodes.h +++ b/engines/agi/opcodes.h @@ -237,8 +237,6 @@ void cmdAdjEgoMoveToXY(AgiGame *state, uint8 *p); void cmdSetSpeed(AgiGame *state, uint8 *p); void cmdSetItemView(AgiGame *state, uint8 *p); void cmdCallV1(AgiGame *state, uint8 *p); -void cmdNewRoomV1(AgiGame *state, uint8 *p); -void cmdNewRoomVV1(AgiGame *state, uint8 *p); void cmdUnknown(AgiGame *state, uint8 *p); void condEqual(AgiGame *state, uint8 *p); -- cgit v1.2.3 From f5217ecbddde888aa85ab8fe1835ac960953b98c Mon Sep 17 00:00:00 2001 From: Etienne Millon Date: Sun, 6 Dec 2015 14:12:53 +0100 Subject: README: Fix broken links --- README | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README b/README index 2a1d7c390e..a34856c81e 100644 --- a/README +++ b/README @@ -160,7 +160,7 @@ reproducible, and still occurs in the latest git/Daily build version. Also check the known problems list (below) and the compatibility list on our website for that game, to ensure the issue is not already known: - http://www.scummvm.org/compatibility_stable.php + http://scummvm.org/compatibility/ Please do not report bugs on games that are not listed as being completeable in the 'Supported Games' section, or compatibility list. We @@ -2434,7 +2434,7 @@ currently we have only x86 MMX optimized versions, and they will not compile on other processors. On Win9x/NT/XP, you can define USE_WINDBG and attach WinDbg to browse -debug messages (see http://www.sysinternals.com/ntw2k/freeware/debugview.shtml). +debug messages (see https://technet.microsoft.com/en-us/sysinternals/debugview.aspx). GCC and MinGW32: -- cgit v1.2.3 From 93f631e3feefd5fea2f9144d74c563d07f99a5da Mon Sep 17 00:00:00 2001 From: Torbjörn Andersson Date: Sun, 6 Dec 2015 17:17:19 +0100 Subject: AGI: Remove unused variable --- engines/agi/console.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/engines/agi/console.cpp b/engines/agi/console.cpp index 7995938d99..89838b3be9 100644 --- a/engines/agi/console.cpp +++ b/engines/agi/console.cpp @@ -143,7 +143,6 @@ bool Console::Cmd_Version(int argc, const char **argv) { const char *wordScanPtr = NULL; const char *wordStartPtr = NULL; const char *versionStartPtr = NULL; - const char *versionPtr = NULL; int wordLen = 0; char curChar = 0; int versionLen = 0; @@ -179,7 +178,6 @@ bool Console::Cmd_Version(int argc, const char **argv) { // Now scan this text for version information wordScanPtr = scriptTextPtr; - versionPtr = NULL; do { curChar = *wordScanPtr; -- cgit v1.2.3 From 4c265a2354928aa8dac0fa991b2bf7c4c841c89f Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 6 Dec 2015 15:23:49 -0500 Subject: ACCESS: Fix crash on Darlene's 'I Told You No' sample --- engines/access/sound.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engines/access/sound.cpp b/engines/access/sound.cpp index b3317cee5f..5fb971188a 100644 --- a/engines/access/sound.cpp +++ b/engines/access/sound.cpp @@ -109,7 +109,7 @@ void SoundManager::playSound(Resource *res, int priority, bool loop) { byte internalSampleRate = resourceData[5]; int sampleSize = READ_LE_UINT16(resourceData + 7); - assert( (sampleSize + 32) == res->_size); + assert( (sampleSize + 32) <= res->_size); int sampleRate = 0; switch (internalSampleRate) { -- cgit v1.2.3 From b2be23ba42bf0e8694d2b335ba7ee3619fcff1b2 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 6 Dec 2015 16:20:24 -0500 Subject: ACCESS: Fix character loading for floppy version --- engines/access/char.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engines/access/char.cpp b/engines/access/char.cpp index 3e95208fe5..2afb81db30 100644 --- a/engines/access/char.cpp +++ b/engines/access/char.cpp @@ -31,7 +31,7 @@ CharEntry::CharEntry(const byte *data, AccessEngine *vm) { Common::MemoryReadStream s(data, 999); _charFlag = s.readByte(); - if (vm->getGameID() != GType_Amazon || vm->isDemo()) { + if (vm->getGameID() != GType_Amazon || !vm->isCD()) { _screenFile.load(s); _estabIndex = s.readSint16LE(); } else { -- cgit v1.2.3 From ade912da56f2263a1ae6e97555dae9dd820489f3 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 6 Dec 2015 22:31:29 +0100 Subject: SWORD25: Build engine by default --- engines/sword25/configure.engine | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engines/sword25/configure.engine b/engines/sword25/configure.engine index 1729bbeb33..6a9428c758 100644 --- a/engines/sword25/configure.engine +++ b/engines/sword25/configure.engine @@ -1,3 +1,3 @@ # This file is included from the main "configure" script # add_engine [name] [desc] [build-by-default] [subengines] [base games] [deps] -add_engine sword25 "Broken Sword 2.5" no "" "" "png zlib 16bit" +add_engine sword25 "Broken Sword 2.5" yes "" "" "png zlib 16bit" -- cgit v1.2.3 From e9e099b6aca4b3b945158500fbb4d6706c6f7c72 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 6 Dec 2015 22:57:03 +0100 Subject: CREDITS: Add credit to the Mindfactory team for Broken Sword 2.5 --- AUTHORS | 3 +++ devtools/credits.pl | 4 ++++ gui/credits.h | 2 ++ 3 files changed, 9 insertions(+) diff --git a/AUTHORS b/AUTHORS index 8f814fde5e..c230c4a3a0 100644 --- a/AUTHORS +++ b/AUTHORS @@ -738,3 +738,6 @@ Special thanks to two Lost Files of Sherlock Holmes games. James M. Ferguson and Barry Duncan for their tenacious efforts to recover the sources. + The Mindfactory team for writing Broken Sword 2.5, a splendid fan-made + sequel, and for sharing the source code with us. + diff --git a/devtools/credits.pl b/devtools/credits.pl index f5d8542ae8..9bfbfd7b5d 100755 --- a/devtools/credits.pl +++ b/devtools/credits.pl @@ -1309,6 +1309,10 @@ begin_credits("Credits"); "Electronic Arts for providing the source code of the two Lost Files of Sherlock Holmes games. ". "James M. Ferguson and Barry Duncan for their tenacious efforts to recover the sources."); + add_paragraph( + "The Mindfactory team for writing Broken Sword 2.5, a splendid fan-made sequel, and for sharing ". + "the source code with us."); + end_section(); end_credits(); diff --git a/gui/credits.h b/gui/credits.h index 2e66a7065e..8f6455e01f 100644 --- a/gui/credits.h +++ b/gui/credits.h @@ -889,5 +889,7 @@ static const char *credits[] = { "C0""", "C0""Electronic Arts IP Preservation Team, particularly Stefan Serbicki, and Vasyl Tsvirkunov of Electronic Arts for providing the source code of the two Lost Files of Sherlock Holmes games. James M. Ferguson and Barry Duncan for their tenacious efforts to recover the sources.", "C0""", +"C0""The Mindfactory team for writing Broken Sword 2.5, a splendid fan-made sequel, and for sharing the source code with us.", +"C0""", "", }; -- cgit v1.2.3 From 7dfc16aa349ad73c0b81f7d0a0178875bd7bc233 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 6 Dec 2015 18:00:09 -0500 Subject: ACCESS: Prevent scenes being briefly shown before fading in --- engines/access/screen.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index e6d43d0156..b46f31f65a 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -89,6 +89,9 @@ void Screen::setPanel(int num) { } void Screen::updateScreen() { + if (_vm->_startup > 0) + return; + // Merge the dirty rects mergeDirtyRects(); -- cgit v1.2.3 From c76059eaf9666058fa0b8fb6e8165d703d366a55 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 7 Dec 2015 00:06:50 +0100 Subject: CREDITS: Fix the case of mindFactory --- AUTHORS | 2 +- devtools/credits.pl | 2 +- gui/credits.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/AUTHORS b/AUTHORS index c230c4a3a0..f5d62c2e14 100644 --- a/AUTHORS +++ b/AUTHORS @@ -738,6 +738,6 @@ Special thanks to two Lost Files of Sherlock Holmes games. James M. Ferguson and Barry Duncan for their tenacious efforts to recover the sources. - The Mindfactory team for writing Broken Sword 2.5, a splendid fan-made + The mindFactory team for writing Broken Sword 2.5, a splendid fan-made sequel, and for sharing the source code with us. diff --git a/devtools/credits.pl b/devtools/credits.pl index 9bfbfd7b5d..1a038c7dee 100755 --- a/devtools/credits.pl +++ b/devtools/credits.pl @@ -1310,7 +1310,7 @@ begin_credits("Credits"); "James M. Ferguson and Barry Duncan for their tenacious efforts to recover the sources."); add_paragraph( - "The Mindfactory team for writing Broken Sword 2.5, a splendid fan-made sequel, and for sharing ". + "The mindFactory team for writing Broken Sword 2.5, a splendid fan-made sequel, and for sharing ". "the source code with us."); end_section(); diff --git a/gui/credits.h b/gui/credits.h index 8f6455e01f..72fe3fa951 100644 --- a/gui/credits.h +++ b/gui/credits.h @@ -889,7 +889,7 @@ static const char *credits[] = { "C0""", "C0""Electronic Arts IP Preservation Team, particularly Stefan Serbicki, and Vasyl Tsvirkunov of Electronic Arts for providing the source code of the two Lost Files of Sherlock Holmes games. James M. Ferguson and Barry Duncan for their tenacious efforts to recover the sources.", "C0""", -"C0""The Mindfactory team for writing Broken Sword 2.5, a splendid fan-made sequel, and for sharing the source code with us.", +"C0""The mindFactory team for writing Broken Sword 2.5, a splendid fan-made sequel, and for sharing the source code with us.", "C0""", "", }; -- cgit v1.2.3 From 7820bd5aed9d19fe09b910d1e6cc7ae1aa010631 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 6 Dec 2015 21:56:28 -0500 Subject: ACCESS: Prevent multiple copies of the same sound being queued --- engines/access/sound.cpp | 31 ++++++++++++++++++++++--------- engines/access/sound.h | 13 +++++++++++-- 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/engines/access/sound.cpp b/engines/access/sound.cpp index 5fb971188a..38f544de4e 100644 --- a/engines/access/sound.cpp +++ b/engines/access/sound.cpp @@ -51,11 +51,20 @@ void SoundManager::clearSounds() { _mixer->stopHandle(_effectsHandle); while (_queue.size()) { - delete _queue[0]; + delete _queue[0]._stream; _queue.remove_at(0); } } +bool SoundManager::isSoundQueued(int soundId) const { + for (uint idx = 0; idx < _queue.size(); ++idx) { + if (_queue[idx]._soundId == soundId) + return true; + } + + return false; +} + void SoundManager::loadSoundTable(int idx, int fileNum, int subfile, int priority) { debugC(1, kDebugSound, "loadSoundTable(%d, %d, %d)", idx, fileNum, subfile); @@ -77,12 +86,15 @@ Resource *SoundManager::loadSound(int fileNum, int subfile) { void SoundManager::playSound(int soundIndex, bool loop) { debugC(1, kDebugSound, "playSound(%d, %d)", soundIndex, loop); + if (isSoundQueued(soundIndex)) + // Prevent duplicate copies of a sound from being queued + return; int priority = _soundTable[soundIndex]._priority; - playSound(_soundTable[soundIndex]._res, priority, loop); + playSound(_soundTable[soundIndex]._res, priority, loop, soundIndex); } -void SoundManager::playSound(Resource *res, int priority, bool loop) { +void SoundManager::playSound(Resource *res, int priority, bool loop, int soundIndex) { debugC(1, kDebugSound, "playSound"); byte *resourceData = res->data(); @@ -139,14 +151,15 @@ void SoundManager::playSound(Resource *res, int priority, bool loop) { error("Unknown format"); if (loop) { - _queue.push_back(new Audio::LoopingAudioStream(audioStream, 0, DisposeAfterUse::NO)); + _queue.push_back(QueuedSound(new Audio::LoopingAudioStream(audioStream, 0, + DisposeAfterUse::NO), soundIndex)); } else { - _queue.push_back(audioStream); + _queue.push_back(QueuedSound(audioStream, soundIndex)); } if (!_mixer->isSoundHandleActive(_effectsHandle)) _mixer->playStream(Audio::Mixer::kSFXSoundType, &_effectsHandle, - _queue[0], -1, _mixer->kMaxChannelVolume, 0, + _queue[0]._stream, -1, _mixer->kMaxChannelVolume, 0, DisposeAfterUse::NO); } @@ -156,12 +169,12 @@ void SoundManager::checkSoundQueue() { if (_queue.empty() || _mixer->isSoundHandleActive(_effectsHandle)) return; - delete _queue[0]; + delete _queue[0]._stream; _queue.remove_at(0); - if (_queue.size() && _queue[0]) + if (_queue.size() && _queue[0]._stream) _mixer->playStream(Audio::Mixer::kSFXSoundType, &_effectsHandle, - _queue[0], -1, _mixer->kMaxChannelVolume, 0, + _queue[0]._stream, -1, _mixer->kMaxChannelVolume, 0, DisposeAfterUse::NO); } diff --git a/engines/access/sound.h b/engines/access/sound.h index e11a6b9730..b372e566d2 100644 --- a/engines/access/sound.h +++ b/engines/access/sound.h @@ -45,15 +45,24 @@ struct SoundEntry { }; class SoundManager { + struct QueuedSound { + Audio::AudioStream *_stream; + int _soundId; + + QueuedSound() : _stream(nullptr), _soundId(-1) {} + QueuedSound(Audio::AudioStream *stream, int soundId) : _stream(stream), _soundId(soundId) {} + }; private: AccessEngine *_vm; Audio::Mixer *_mixer; Audio::SoundHandle _effectsHandle; - Common::Array _queue; + Common::Array _queue; void clearSounds(); - void playSound(Resource *res, int priority, bool loop); + void playSound(Resource *res, int priority, bool loop, int soundIndex = -1); + + bool isSoundQueued(int soundId) const; public: Common::Array _soundTable; bool _playingSound; -- cgit v1.2.3 From 079037b73990b6107e59c7f1cd971c3a1cc221d1 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Tue, 8 Dec 2015 13:21:05 +0100 Subject: SDL: Prevent graphics stretching in fullscreen when using SDL2. As a side effect we get better coordinates from mouse move events in fullscreen, i.e. we do not get actual window coordinates but something close to actual viewport coordinates. The easily noticable issue is that mouse coordinates inside black bars are outside of the viewport. For example, the x coordinate can get negative when there's a black bar at the left side. --- backends/graphics/surfacesdl/surfacesdl-graphics.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/backends/graphics/surfacesdl/surfacesdl-graphics.cpp b/backends/graphics/surfacesdl/surfacesdl-graphics.cpp index 9cb14525ee..01afc84b24 100644 --- a/backends/graphics/surfacesdl/surfacesdl-graphics.cpp +++ b/backends/graphics/surfacesdl/surfacesdl-graphics.cpp @@ -2380,7 +2380,8 @@ void SurfaceSdlGraphicsManager::deinitializeRenderer() { SDL_Surface *SurfaceSdlGraphicsManager::SDL_SetVideoMode(int width, int height, int bpp, Uint32 flags) { deinitializeRenderer(); - if (!_window->createWindow(width, height, (flags & SDL_FULLSCREEN) ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0)) { + const bool isFullscreen = (flags & SDL_FULLSCREEN) != 0; + if (!_window->createWindow(width, height, isFullscreen ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0)) { return nullptr; } @@ -2390,6 +2391,14 @@ SDL_Surface *SurfaceSdlGraphicsManager::SDL_SetVideoMode(int width, int height, return nullptr; } + // We set the logical renderer size to the requested resolution in + // fullscreen. This assures that SDL2 adds black bars if needed to prevent + // stretching. + if (isFullscreen && SDL_RenderSetLogicalSize(_renderer, width, height) < 0) { + deinitializeRenderer(); + return nullptr; + } + _screenTexture = SDL_CreateTexture(_renderer, SDL_PIXELFORMAT_RGB565, SDL_TEXTUREACCESS_STREAMING, width, height); if (!_screenTexture) { deinitializeRenderer(); -- cgit v1.2.3 From 457640a16257be20581080d6d682994cca94ba37 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Tue, 8 Dec 2015 15:40:35 +0100 Subject: SDL: Prevent cursor from leaving screen area in fullscreen with SDL2. --- .../graphics/surfacesdl/surfacesdl-graphics.cpp | 30 ++++++++++++++++++++++ backends/graphics/surfacesdl/surfacesdl-graphics.h | 2 ++ 2 files changed, 32 insertions(+) diff --git a/backends/graphics/surfacesdl/surfacesdl-graphics.cpp b/backends/graphics/surfacesdl/surfacesdl-graphics.cpp index 01afc84b24..e45773e5d7 100644 --- a/backends/graphics/surfacesdl/surfacesdl-graphics.cpp +++ b/backends/graphics/surfacesdl/surfacesdl-graphics.cpp @@ -125,6 +125,7 @@ SurfaceSdlGraphicsManager::SurfaceSdlGraphicsManager(SdlEventSource *sdlEventSou _hwscreen(0), #if SDL_VERSION_ATLEAST(2, 0, 0) _renderer(nullptr), _screenTexture(nullptr), + _viewportX(0), _viewportY(0), _mouseScaleX(1.0f), _mouseScaleY(1.0f), #else _originalBitsPerPixel(0), #endif @@ -2353,6 +2354,16 @@ void SurfaceSdlGraphicsManager::notifyVideoExpose() { } void SurfaceSdlGraphicsManager::transformMouseCoordinates(Common::Point &point) { +#if SDL_VERSION_ATLEAST(2, 0, 0) + // In fullscreen mode we can easily get coordinates outside the actual + // screen area. For example, if black bars are added left/right we can end + // up with negative x coordinates if the user moves the mouse inside the + // black bar. Here, we post process the received cooridnates to give the + // user the feeling the black bars do not exist. + point.x = (int)((point.x + _viewportX) * _mouseScaleX); + point.y = (int)((point.y + _viewportY) * _mouseScaleY); +#endif + if (!_overlayVisible) { point.x /= _videoMode.scaleFactor; point.y /= _videoMode.scaleFactor; @@ -2399,6 +2410,25 @@ SDL_Surface *SurfaceSdlGraphicsManager::SDL_SetVideoMode(int width, int height, return nullptr; } + // To provide smooth mouse handling in case black borders are added, we + // obtain the actual window size and the internal renderer scaling. + // Based on this we calculate scale factors to scale received mouse + // coordinates into actual screen area coordinates. + float scaleX = 0, scaleY = 0; + SDL_RenderGetScale(_renderer, &scaleX, &scaleY); + int windowWidth = 1, windowHeight = 1; + SDL_GetWindowSize(_window->getSDLWindow(), &windowWidth, &windowHeight); + + _mouseScaleX = (width * scaleX) / windowWidth; + _mouseScaleY = (height * scaleY) / windowHeight; + + // Obtain viewport top left coordinates to transform received coordinates + // into visible area coordinates (i.e. including black borders). + SDL_Rect viewport; + SDL_RenderGetViewport(_renderer, &viewport); + _viewportX = viewport.x; + _viewportY = viewport.y; + _screenTexture = SDL_CreateTexture(_renderer, SDL_PIXELFORMAT_RGB565, SDL_TEXTUREACCESS_STREAMING, width, height); if (!_screenTexture) { deinitializeRenderer(); diff --git a/backends/graphics/surfacesdl/surfacesdl-graphics.h b/backends/graphics/surfacesdl/surfacesdl-graphics.h index 2431ce8664..07ff4e5926 100644 --- a/backends/graphics/surfacesdl/surfacesdl-graphics.h +++ b/backends/graphics/surfacesdl/surfacesdl-graphics.h @@ -171,6 +171,8 @@ protected: * around this API to keep the code paths as close as possible. */ SDL_Renderer *_renderer; SDL_Texture *_screenTexture; + int _viewportX, _viewportY; + float _mouseScaleX, _mouseScaleY; void deinitializeRenderer(); SDL_Surface *SDL_SetVideoMode(int width, int height, int bpp, Uint32 flags); -- cgit v1.2.3 From 1eecc41ef65300fb849e42110a2463fa2b3ce376 Mon Sep 17 00:00:00 2001 From: vanfanel Date: Fri, 4 Dec 2015 13:11:22 +0100 Subject: OPENGLSDL: Request GLES1.1 context with SDL2 for GLES targets. --- backends/graphics/openglsdl/openglsdl-graphics.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/backends/graphics/openglsdl/openglsdl-graphics.cpp b/backends/graphics/openglsdl/openglsdl-graphics.cpp index a2b172f14a..42327197b7 100644 --- a/backends/graphics/openglsdl/openglsdl-graphics.cpp +++ b/backends/graphics/openglsdl/openglsdl-graphics.cpp @@ -386,6 +386,13 @@ bool OpenGLSdlGraphicsManager::setupMode(uint width, uint height) { } } +#ifdef USE_GLES + // SDL2 will create a GLES2 context by default, so this is needed for GLES1-profile + // functions to work. + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 1); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1); +#endif _glContext = SDL_GL_CreateContext(_window->getSDLWindow()); if (!_glContext) { return false; -- cgit v1.2.3 From 8981279580ea97a0456d6b4ac4c0cc5095861912 Mon Sep 17 00:00:00 2001 From: vanfanel Date: Fri, 4 Dec 2015 15:57:06 +0100 Subject: CONFIGURE: Fix OpenGL ES detection for Raspberry Pi and other SBCs. --- configure | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/configure b/configure index ad513e0079..561bd1e5ab 100755 --- a/configure +++ b/configure @@ -2573,9 +2573,9 @@ if test -n "$_host"; then raspberrypi) # This is needed because the official cross compiler doesn't have multiarch enabled # but Raspbian does. - # Be careful as it's the linker (LDFLAGS) which must know about sysroot. - # These are needed to build against Raspbian's libSDL even if we don't activate - # dispmanx support. + # Be careful as it's the linker (LDFLAGS) which must know about sysroot. + # These are needed to build against Raspbian's libSDL even if we don't activate + # dispmanx support. append_var LDFLAGS "--sysroot=$RPI_ROOT" append_var LDFLAGS "-B$RPI_ROOT/usr/lib/arm-linux-gnueabihf" append_var LDFLAGS "-Xlinker --rpath-link=$RPI_ROOT/usr/lib/arm-linux-gnueabihf" @@ -2583,13 +2583,17 @@ if test -n "$_host"; then append_var LDFLAGS "-Xlinker --rpath-link=$RPI_ROOT/opt/vc/lib" append_var LDFLAGS "-L$RPI_ROOT/opt/vc/lib" append_var LDFLAGS "-L/opt/rpi_root/lib/arm-linux-gnueabihf -L$RPI_ROOT/usr/lib -L$RPI_ROOT/opt/vc/lib -lbcm_host -lvcos" + # This is so optional OpenGL ES includes are found. + append_var CXXFLAGS "-I$RPI_ROOT/opt/vc/include" _savegame_timestamp=no _eventrec=no _build_scalers=no _build_hq_scalers=no - # It makes no sense to have both GL and dispmanx rendering support. - _opengl=no - _opengles=no + # This is so OpenGL detection works for OpenGL ES, only if OpenGL has been + # explicitly activated. + if test "$_opengl" = yes; then + _opengles=yes + fi ;; dreamcast) append_var DEFINES "-DDISABLE_DEFAULT_SAVEFILEMANAGER" @@ -4035,6 +4039,13 @@ EOF cat > $TMPC << EOF #include <$i> int main(void) { return GL_OES_VERSION_1_1; } +EOF + cc_check $DEFINES $OPENGL_CFLAGS $OPENGL_LIBS && _opengl=yes && _opengles=yes && break + + # Test the current header for OpenGL ES on SBCs (Raspberry Pi, Cubieboard, etc) + cat > $TMPC << EOF +#include <$i> +int main(void) { return GL_VERSION_ES_CM_1_1; } EOF cc_check $DEFINES $OPENGL_CFLAGS $OPENGL_LIBS && _opengl=yes && _opengles=yes && break done -- cgit v1.2.3 From 66dbb7f485899a555093e1b909d65c97589a5681 Mon Sep 17 00:00:00 2001 From: vanfanel Date: Fri, 4 Dec 2015 16:05:19 +0100 Subject: SDL/DISPMANX: Remove dispmanx graphics output. --- .../graphics/dispmanxsdl/dispmanxsdl-graphics.cpp | 590 --------------------- .../graphics/dispmanxsdl/dispmanxsdl-graphics.h | 53 -- backends/module.mk | 5 - backends/platform/sdl/module.mk | 6 - backends/platform/sdl/posix/posix-main.cpp | 2 +- .../platform/sdl/raspberrypi/README.RASPBERRYPI | 45 +- .../platform/sdl/raspberrypi/raspberrypi-main.cpp | 51 -- backends/platform/sdl/raspberrypi/raspberrypi.cpp | 42 -- backends/platform/sdl/raspberrypi/raspberrypi.h | 35 -- configure | 36 +- 10 files changed, 10 insertions(+), 855 deletions(-) delete mode 100644 backends/graphics/dispmanxsdl/dispmanxsdl-graphics.cpp delete mode 100644 backends/graphics/dispmanxsdl/dispmanxsdl-graphics.h delete mode 100644 backends/platform/sdl/raspberrypi/raspberrypi-main.cpp delete mode 100644 backends/platform/sdl/raspberrypi/raspberrypi.cpp delete mode 100644 backends/platform/sdl/raspberrypi/raspberrypi.h diff --git a/backends/graphics/dispmanxsdl/dispmanxsdl-graphics.cpp b/backends/graphics/dispmanxsdl/dispmanxsdl-graphics.cpp deleted file mode 100644 index 3da536be2b..0000000000 --- a/backends/graphics/dispmanxsdl/dispmanxsdl-graphics.cpp +++ /dev/null @@ -1,590 +0,0 @@ -/* ScummVM - Graphic Adventure Engine - * - * ScummVM is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -// Needed for Raspberry Pi header inclusion -#define FORBIDDEN_SYMBOL_ALLOW_ALL - -#include "common/scummsys.h" - -#if defined(DISPMANX) - -#include "backends/graphics/dispmanxsdl/dispmanxsdl-graphics.h" -#include "graphics/scaler/aspect.h" -#include "common/mutex.h" -#include "common/textconsole.h" - -#include - -struct dispvarsStruct { - DISPMANX_DISPLAY_HANDLE_T display; - DISPMANX_UPDATE_HANDLE_T update; - DISPMANX_ELEMENT_HANDLE_T element; - VC_IMAGE_TYPE_T pixFormat; - VC_DISPMANX_ALPHA_T alpha; - - VC_RECT_T bmpRect; - VC_RECT_T srcRect; - VC_RECT_T dstRect; - uint32_t vcImagePtr; - int screen; - int pitch; - unsigned int dispmanxWidth; - unsigned int dispmanxHeight; - bool aspectRatioCorrection; - void *pixmem; - - int numpages; - dispmanxPage *pages; - dispmanxPage *currentPage; - int pageflipPending; - - pthread_cond_t vsyncCondition; - pthread_mutex_t vsyncCondMutex; - pthread_mutex_t pendingMutex; - - SDL_Surface *fscreen; -}; - -struct dispmanxPage { - DISPMANX_RESOURCE_HANDLE_T resource; - bool used; - // Each page has it's own mutex for - // isolating the access to it's "used" flag. - pthread_mutex_t pageUsedMutex; - - // This field will allow us to access the - // main dispvars struct, for the vsync cb. - struct dispvarsStruct *dispvars; -}; - -DispmanXSdlGraphicsManager::DispmanXSdlGraphicsManager(SdlEventSource *sdlEventSource, SdlWindow *window) - : SurfaceSdlGraphicsManager(sdlEventSource, window) { - _dispvars = new(dispvarsStruct); - dispmanXInit(); -} - -DispmanXSdlGraphicsManager::~DispmanXSdlGraphicsManager() { - dispmanXVideoQuit(); - delete(_dispvars); -} - -void DispmanXSdlGraphicsManager::dispmanXInit() { - _dispvars->screen = 0; - _dispvars->vcImagePtr = 0; - _dispvars->numpages = 3; - _dispvars->pages = (struct dispmanxPage *)calloc(_dispvars->numpages, sizeof(struct dispmanxPage)); - _dispvars->pageflipPending = 0; - _dispvars->currentPage = NULL; - _dispvars->pixFormat = VC_IMAGE_RGB565; - - /* Transparency disabled */ - _dispvars->alpha.flags = DISPMANX_FLAGS_ALPHA_FIXED_ALL_PIXELS; - _dispvars->alpha.opacity = 255; - _dispvars->alpha.mask = 0; - _dispvars->element = 0; - - // Init each page's variables - for (int i = 0; i < _dispvars->numpages; i++) { - _dispvars->pages[i].used = false; - _dispvars->pages[i].dispvars = _dispvars; - _dispvars->pages[i].resource = 0; - pthread_mutex_init(&_dispvars->pages[i].pageUsedMutex, NULL); - } - - // Initialize the other mutex and condition variables - pthread_cond_init(&_dispvars->vsyncCondition, NULL); - pthread_mutex_init(&_dispvars->pendingMutex, NULL); - pthread_mutex_init(&_dispvars->vsyncCondMutex, NULL); - - // Before we call any vc_* function, we need to call this one. - bcm_host_init(); - - _dispvars->display = vc_dispmanx_display_open(_dispvars->screen); - graphics_get_display_size(_dispvars->display, &_dispvars->dispmanxWidth, &_dispvars->dispmanxHeight); - - // We need this so SDL_SetVideoMode() is called once. - _dispvars->fscreen = NULL; -} - -void DispmanXSdlGraphicsManager::dispmanXSetup(int srcWidth, int srcHeight) { - unsigned int dstWidth, dstHeight, dstXpos, dstYpos; - - // If we have an element, we have to free it along with it's resources. - if (_dispvars->element) { - dispmanXFreeResources(); - } - - // We do this for 2 bytes per pixel which is default on the Rpi. - _dispvars->pitch = srcWidth * 2; - if (_dispvars->aspectRatioCorrection) { - float aspect = ((float)srcWidth / (float)srcHeight); - dstWidth = _dispvars->dispmanxHeight * aspect; - } else { - dstWidth = _dispvars->dispmanxWidth; - } - dstHeight = _dispvars->dispmanxHeight; - - // If we obtain a scaled image width that is bigger than the physical screen width, - // then we keep the physical screen width as our maximun width. - if (dstWidth > _dispvars->dispmanxWidth) { - dstWidth = _dispvars->dispmanxWidth; - } - - dstXpos = (_dispvars->dispmanxWidth - dstWidth) / 2; - dstYpos = (_dispvars->dispmanxHeight - dstHeight) / 2; - - // Remember we have to transfer the whole bitmap even if we would have - // interest in a part of it! Blitting is done by the GPU. - vc_dispmanx_rect_set(&_dispvars->dstRect, dstXpos, dstYpos, dstWidth, dstHeight); - vc_dispmanx_rect_set(&_dispvars->bmpRect, 0, 0, srcWidth, srcHeight); - vc_dispmanx_rect_set(&_dispvars->srcRect, 0, 0, srcWidth << 16, srcHeight << 16); - - for (int i = 0; i < _dispvars->numpages; i++) { - _dispvars->pages[i].resource = vc_dispmanx_resource_create(_dispvars->pixFormat, - srcWidth, srcHeight, &(_dispvars->vcImagePtr)); - } - - // Add the element. Has to be removed before getting here again. - _dispvars->update = vc_dispmanx_update_start(0); - - _dispvars->element = vc_dispmanx_element_add( - _dispvars->update,_dispvars->display, 0, - &_dispvars->dstRect, 0, - &_dispvars->srcRect, DISPMANX_PROTECTION_NONE, - &_dispvars->alpha, 0, (DISPMANX_TRANSFORM_T)0); - - vc_dispmanx_update_submit_sync(_dispvars->update); -} - -void dispmanXVSyncCallback(DISPMANX_UPDATE_HANDLE_T u, void *arg) { - struct dispmanxPage *page = (struct dispmanxPage*)arg; - struct dispvarsStruct *dispvars = page->dispvars; - - // Marking the page as free must be done before the signaling - // so when the update function continues (it won't continue until we signal) - // we can chose this page as free. - if (dispvars->currentPage) { - pthread_mutex_lock(&dispvars->currentPage->pageUsedMutex); - - // We mark as free the page that was visible until now. - page->dispvars->currentPage->used = false; - - pthread_mutex_unlock(&dispvars->currentPage->pageUsedMutex); - } - - // The page on which we issued the flip that - // caused this callback becomes the visible one - dispvars->currentPage = page; - - // These two things must be isolated "atomically" to avoid getting - // a false positive in the pending_mutex test in update function. - pthread_mutex_lock(&dispvars->pendingMutex); - - dispvars->pageflipPending--; - pthread_cond_signal(&dispvars->vsyncCondition); - - pthread_mutex_unlock(&dispvars->pendingMutex); -} - -void DispmanXSdlGraphicsManager::dispmanXUpdate() { - // Wait until last issued flip completes to get a free page. Also, - // dispmanx doesn't support issuing more than one pageflip. - pthread_mutex_lock(&_dispvars->pendingMutex); - - if (_dispvars->pageflipPending > 0) { - pthread_cond_wait(&_dispvars->vsyncCondition, &_dispvars->pendingMutex); - } - - pthread_mutex_unlock(&_dispvars->pendingMutex); - - struct dispmanxPage *page = dispmanXGetFreePage(); - - // Frame blitting - vc_dispmanx_resource_write_data(page->resource, _dispvars->pixFormat, - _dispvars->pitch, _dispvars->pixmem, &_dispvars->bmpRect); - - // Issue a page flip at the next vblank interval (will be done at vsync anyway). - _dispvars->update = vc_dispmanx_update_start(0); - - vc_dispmanx_element_change_source(_dispvars->update, _dispvars->element, - page->resource); - vc_dispmanx_update_submit(_dispvars->update, &dispmanXVSyncCallback, page); - - pthread_mutex_lock(&_dispvars->pendingMutex); - _dispvars->pageflipPending++; - pthread_mutex_unlock(&_dispvars->pendingMutex); -} - -struct dispmanxPage *DispmanXSdlGraphicsManager::dispmanXGetFreePage(void) { - struct dispmanxPage *page = NULL; - - while (!page) { - // Try to find a free page - for (int i = 0; i < _dispvars->numpages; ++i) { - if (!_dispvars->pages[i].used) { - page = (_dispvars->pages) + i; - break; - } - } - - // If no page is free at the moment, - // wait until a free page is freed by vsync CB. - if (!page) { - pthread_mutex_lock(&_dispvars->vsyncCondMutex); - pthread_cond_wait(&_dispvars->vsyncCondition, &_dispvars->vsyncCondMutex); - pthread_mutex_unlock(&_dispvars->vsyncCondMutex); - } - } - - // We mark the choosen page as used - pthread_mutex_lock(&page->pageUsedMutex); - page->used = true; - pthread_mutex_unlock(&page->pageUsedMutex); - - return page; -} - -void DispmanXSdlGraphicsManager::dispmanXFreeResources(void) { - // What if we run into the vsync cb code after freeing the resources? - pthread_mutex_lock(&_dispvars->pendingMutex); - if (_dispvars->pageflipPending > 0) - { - pthread_cond_wait(&_dispvars->vsyncCondition, &_dispvars->pendingMutex); - } - pthread_mutex_unlock(&_dispvars->pendingMutex); - - for (int i = 0; i < _dispvars->numpages; i++) { - vc_dispmanx_resource_delete(_dispvars->pages[i].resource); - _dispvars->pages[i].resource = 0; - _dispvars->pages[i].used = false; - } - - _dispvars->update = vc_dispmanx_update_start(0); - vc_dispmanx_element_remove(_dispvars->update, _dispvars->element); - vc_dispmanx_update_submit_sync(_dispvars->update); - // We use this on the setup function to know if we have to free resources and element. - _dispvars->element = 0; -} - -void DispmanXSdlGraphicsManager::dispmanXVideoQuit() { - // This also waits for pending flips to complete, that's needed before - // we destroy the mutexes and condition. - dispmanXFreeResources(); - - // Destroy the mutexes and conditions - for (int i = 0; i < _dispvars->numpages; i++) { - pthread_mutex_destroy(&_dispvars->pages[i].pageUsedMutex); - } - pthread_mutex_destroy(&_dispvars->pendingMutex); - pthread_mutex_destroy(&_dispvars->vsyncCondMutex); - pthread_cond_destroy(&_dispvars->vsyncCondition); - - free(_dispvars->pages); - - // Close display and deinit - vc_dispmanx_display_close(_dispvars->display); - bcm_host_deinit(); -} - -bool DispmanXSdlGraphicsManager::loadGFXMode() { - _forceFull = true; - - // In dispmanX, we manage aspect ratio correction, so for scummvm it's always disabled. - _videoMode.aspectRatioCorrection = false; - - _videoMode.overlayWidth = _videoMode.screenWidth; - _videoMode.overlayHeight = _videoMode.screenHeight; - _videoMode.hardwareWidth = _videoMode.screenWidth; - _videoMode.hardwareHeight = _videoMode.screenHeight; - - // - // Create the surface that contains the 8 bit game data - // - - _screen = SDL_CreateRGBSurface(SDL_SWSURFACE, _videoMode.screenWidth, _videoMode.screenHeight, - _screenFormat.bytesPerPixel << 3, - ((1 << _screenFormat.rBits()) - 1) << _screenFormat.rShift , - ((1 << _screenFormat.gBits()) - 1) << _screenFormat.gShift , - ((1 << _screenFormat.bBits()) - 1) << _screenFormat.bShift , - ((1 << _screenFormat.aBits()) - 1) << _screenFormat.aShift ); - if (_screen == NULL) - error("allocating _screen failed"); - - // Avoid having SDL_SRCALPHA set even if we supplied an alpha-channel in the format. - SDL_SetAlpha(_screen, 0, 255); - - // We set our own default palette to all black. - SDL_SetColors(_screen, _currentPalette, 0, 256); - - // - // Create the surface that contains the scaled graphics in 16 bit mode - // - - dispmanXSetup(_videoMode.screenWidth, _videoMode.screenHeight); - - _hwscreen = SDL_CreateRGBSurface(SDL_SWSURFACE, _videoMode.hardwareWidth, _videoMode.hardwareHeight, 16, - 0, 0, 0, 0); - - // This is just so SDL 1.x input is initialized. Only once! - if (_dispvars->fscreen == NULL) - _dispvars->fscreen = SDL_SetVideoMode(_videoMode.hardwareWidth, _videoMode.hardwareHeight, 16, SDL_FULLSCREEN); - if (_hwscreen == NULL) { - // Don't use error here because we don't have access to the debug console - warning("Allocating surface for dispmanX rendering _hwscreen failed"); - g_system->quit(); - } - - // We render to dispmanx resources from _hwscreen pixels array - _dispvars->pixmem = _hwscreen->pixels; - - _overlayscreen = SDL_CreateRGBSurface(SDL_SWSURFACE, _videoMode.overlayWidth, _videoMode.overlayHeight, - 16, - _hwscreen->format->Rmask, - _hwscreen->format->Gmask, - _hwscreen->format->Bmask, - _hwscreen->format->Amask); - - if (_overlayscreen == NULL) - error("allocating _overlayscreen failed"); - - _overlayFormat.bytesPerPixel = _overlayscreen->format->BytesPerPixel; - - _overlayFormat.rLoss = _overlayscreen->format->Rloss; - _overlayFormat.gLoss = _overlayscreen->format->Gloss; - _overlayFormat.bLoss = _overlayscreen->format->Bloss; - _overlayFormat.aLoss = _overlayscreen->format->Aloss; - - _overlayFormat.rShift = _overlayscreen->format->Rshift; - _overlayFormat.gShift = _overlayscreen->format->Gshift; - _overlayFormat.bShift = _overlayscreen->format->Bshift; - _overlayFormat.aShift = _overlayscreen->format->Ashift; - -#ifdef USE_OSD - _osdSurface = SDL_CreateRGBSurface(SDL_SWSURFACE | SDL_RLEACCEL | SDL_SRCCOLORKEY | SDL_SRCALPHA, - _hwscreen->w, - _hwscreen->h, - 16, - _hwscreen->format->Rmask, - _hwscreen->format->Gmask, - _hwscreen->format->Bmask, - _hwscreen->format->Amask); - if (_osdSurface == NULL) - error("allocating _osdSurface failed"); - SDL_SetColorKey(_osdSurface, SDL_RLEACCEL | SDL_SRCCOLORKEY | SDL_SRCALPHA, kOSDColorKey); -#endif - - _eventSource->resetKeyboadEmulation( - _videoMode.screenWidth, effectiveScreenHeight()); - - return true; -} - -void DispmanXSdlGraphicsManager::clearOverlay() { - //assert(_transactionMode == kTransactionNone); - - Common::StackLock lock(_graphicsMutex); // Lock the mutex until this function ends - - if (!_overlayVisible) - return; - - // Clear the overlay by making the game screen "look through" everywhere. - SDL_Rect src, dst; - src.x = src.y = 0; - dst.x = dst.y = 0; - src.w = dst.w = _videoMode.screenWidth; - src.h = dst.h = _videoMode.screenHeight; - if (SDL_BlitSurface(_screen, &src, _hwscreen, &dst) != 0) - error("SDL_BlitSurface failed: %s", SDL_GetError()); - - SDL_LockSurface(_hwscreen); - SDL_LockSurface(_overlayscreen); - Normal1x((byte *)(_hwscreen->pixels), _hwscreen->pitch, - (byte *)_overlayscreen->pixels, _overlayscreen->pitch, _videoMode.screenWidth, _videoMode.screenHeight); - - SDL_UnlockSurface(_hwscreen); - SDL_UnlockSurface(_overlayscreen); - - _forceFull = true; -} - -void DispmanXSdlGraphicsManager::internUpdateScreen() { - SDL_Surface *srcSurf, *origSurf; - int height, width; - - // If the shake position changed, fill the dirty area with blackness - if (_currentShakePos != _newShakePos || - (_mouseNeedsRedraw && _mouseBackup.y <= _currentShakePos)) { - SDL_Rect blackrect = {0, 0, (Uint16)(_videoMode.screenWidth * _videoMode.scaleFactor), (Uint16)(_newShakePos * _videoMode.scaleFactor)}; - - if (_dispvars->aspectRatioCorrection && !_overlayVisible) - blackrect.h = real2Aspect(blackrect.h - 1) + 1; - - SDL_FillRect(_hwscreen, &blackrect, 0); - - _currentShakePos = _newShakePos; - - _forceFull = true; - } - - // Check whether the palette was changed in the meantime and update the - // screen surface accordingly. - if (_screen && _paletteDirtyEnd != 0) { - SDL_SetColors(_screen, _currentPalette + _paletteDirtyStart, - _paletteDirtyStart, - _paletteDirtyEnd - _paletteDirtyStart); - - _paletteDirtyEnd = 0; - - _forceFull = true; - } - -#ifdef USE_OSD - // OSD visible (i.e. non-transparent)? - if (_osdAlpha != SDL_ALPHA_TRANSPARENT) { - // Updated alpha value - const int diff = SDL_GetTicks() - _osdFadeStartTime; - if (diff > 0) { - if (diff >= kOSDFadeOutDuration) { - // Back to full transparency - _osdAlpha = SDL_ALPHA_TRANSPARENT; - } else { - // Do a linear fade out... - const int startAlpha = SDL_ALPHA_TRANSPARENT + kOSDInitialAlpha * (SDL_ALPHA_OPAQUE - SDL_ALPHA_TRANSPARENT) / 100; - _osdAlpha = startAlpha + diff * (SDL_ALPHA_TRANSPARENT - startAlpha) / kOSDFadeOutDuration; - } - SDL_SetAlpha(_osdSurface, SDL_RLEACCEL | SDL_SRCCOLORKEY | SDL_SRCALPHA, _osdAlpha); - _forceFull = true; - } - } -#endif - - if (!_overlayVisible) { - origSurf = _screen; - srcSurf = _hwscreen; - width = _videoMode.screenWidth; - height = _videoMode.screenHeight; - } else { - origSurf = _overlayscreen; - srcSurf = _hwscreen; - width = _videoMode.overlayWidth; - height = _videoMode.overlayHeight; - } - - // Add the area covered by the mouse cursor to the list of dirty rects if - // we have to redraw the mouse. - if (_mouseNeedsRedraw) - undrawMouse(); - - // Force a full redraw if requested - if (_forceFull) { - _numDirtyRects = 1; - _dirtyRectList[0].x = 0; - _dirtyRectList[0].y = 0; - _dirtyRectList[0].w = width; - _dirtyRectList[0].h = height; - } - - // Only draw anything if necessary - if (_numDirtyRects > 0 || _mouseNeedsRedraw) { - SDL_Rect *r; - SDL_Rect dst; - SDL_Rect *lastRect = _dirtyRectList + _numDirtyRects; - - for (r = _dirtyRectList; r != lastRect; ++r) { - dst = *r; - - if (SDL_BlitSurface(origSurf, r, srcSurf, &dst) != 0) - error("SDL_BlitSurface failed: %s", SDL_GetError()); - } - - // Readjust the dirty rect list in case we are doing a full update. - // This is necessary if shaking is active. - if (_forceFull) { - _dirtyRectList[0].y = 0; - _dirtyRectList[0].h = effectiveScreenHeight(); - } - - drawMouse(); - -#ifdef USE_OSD - if (_osdAlpha != SDL_ALPHA_TRANSPARENT) { - SDL_BlitSurface(_osdSurface, 0, _hwscreen, 0); - } -#endif - - // Finally, blit all our changes to the screen - if (!_displayDisabled) { - SDL_UpdateRects(_hwscreen, _numDirtyRects, _dirtyRectList); - dispmanXUpdate(); - } - } - - _numDirtyRects = 0; - _forceFull = false; - _mouseNeedsRedraw = false; -} - -bool DispmanXSdlGraphicsManager::handleScalerHotkeys(Common::KeyCode key) { - - // Ctrl-Alt-a toggles aspect ratio correction - if (key == 'a') { - setFeatureState(OSystem::kFeatureAspectRatioCorrection, !_dispvars->aspectRatioCorrection); -#ifdef USE_OSD - char buffer[128]; - if (_dispvars->aspectRatioCorrection) - sprintf(buffer, "%s", ("Enabled aspect ratio correction")); - else - sprintf(buffer, "%s", ("Disabled aspect ratio correction")); - displayMessageOnOSD(buffer); -#endif - internUpdateScreen(); - return true; - } - - return true; -} - -bool DispmanXSdlGraphicsManager::hasFeature(OSystem::Feature f) { - if (f == OSystem::kFeatureFullscreenMode) { - return false; - } else { - return SurfaceSdlGraphicsManager::hasFeature(f); - } -} - -void DispmanXSdlGraphicsManager::setFullscreenMode(bool enable) { - // Since we're always in fullscreen mode, we do nothing here. -} - -void DispmanXSdlGraphicsManager::setAspectRatioCorrection(bool enable) { - Common::StackLock lock(_graphicsMutex); - // We simply take note on what's the aspect ratio correction activation state. - _dispvars->aspectRatioCorrection = enable; - - // If we have a videomode setup already, call dispmanXSetup() again so aspect ratio - // correction activation/deactivation works from the menu. - if (_oldVideoMode.setup && _dispvars->aspectRatioCorrection == enable) { - dispmanXSetup(_videoMode.screenWidth, _videoMode.screenHeight); - } -} - -#endif diff --git a/backends/graphics/dispmanxsdl/dispmanxsdl-graphics.h b/backends/graphics/dispmanxsdl/dispmanxsdl-graphics.h deleted file mode 100644 index 6a2ede2383..0000000000 --- a/backends/graphics/dispmanxsdl/dispmanxsdl-graphics.h +++ /dev/null @@ -1,53 +0,0 @@ -/* ScummVM - Graphic Adventure Engine - * - * ScummVM is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef BACKENDS_GRAPHICS_SDL_DISPMANX_H -#define BACKENDS_GRAPHICS_SDL_DISPMANX_H - -#include "backends/graphics/surfacesdl/surfacesdl-graphics.h" - -struct dispvarsStruct; -struct dispmanxPage; - -class DispmanXSdlGraphicsManager : public SurfaceSdlGraphicsManager { -public: - DispmanXSdlGraphicsManager(SdlEventSource *sdlEventSource, SdlWindow *window); - ~DispmanXSdlGraphicsManager(); - bool loadGFXMode(); - void internUpdateScreen(); - bool handleScalerHotkeys(Common::KeyCode key); - void setFullscreenMode(bool enable); - void setAspectRatioCorrection(bool enable); - void clearOverlay(); - bool hasFeature(OSystem::Feature f); -protected: - // Raspberry Pi Dispmanx API - void dispmanXSetup(int width, int height); - void dispmanXInit(); - void dispmanXUpdate(); - dispmanxPage *dispmanXGetFreePage(); - void dispmanXFreeResources(); - void dispmanXVideoQuit(); - dispvarsStruct *_dispvars; -}; - -#endif /* BACKENDS_GRAPHICS_SDL_DISPMANX_H */ diff --git a/backends/module.mk b/backends/module.mk index 7f2fb05489..e5e2905781 100644 --- a/backends/module.mk +++ b/backends/module.mk @@ -129,11 +129,6 @@ MODULE_OBJS += \ mixer/sdl13/sdl13-mixer.o endif -ifdef DISPMANX -MODULE_OBJS += \ - graphics/dispmanxsdl/dispmanxsdl-graphics.o -endif - ifeq ($(BACKEND),tizen) MODULE_OBJS += \ timer/tizen/timer.o diff --git a/backends/platform/sdl/module.mk b/backends/platform/sdl/module.mk index 65d12dceed..74dd506d31 100644 --- a/backends/platform/sdl/module.mk +++ b/backends/platform/sdl/module.mk @@ -36,12 +36,6 @@ MODULE_OBJS += \ ps3/ps3.o endif -ifdef DISPMANX -MODULE_OBJS += \ - raspberrypi/raspberrypi-main.o \ - raspberrypi/raspberrypi.o -endif - # We don't use rules.mk but rather manually update OBJS and MODULE_DIRS. MODULE_OBJS := $(addprefix $(MODULE)/, $(MODULE_OBJS)) OBJS := $(MODULE_OBJS) $(OBJS) diff --git a/backends/platform/sdl/posix/posix-main.cpp b/backends/platform/sdl/posix/posix-main.cpp index 492da70eeb..d07db11b0c 100644 --- a/backends/platform/sdl/posix/posix-main.cpp +++ b/backends/platform/sdl/posix/posix-main.cpp @@ -22,7 +22,7 @@ #include "common/scummsys.h" -#if defined(POSIX) && !defined(MACOSX) && !defined(SAMSUNGTV) && !defined(MAEMO) && !defined(WEBOS) && !defined(LINUXMOTO) && !defined(GPH_DEVICE) && !defined(GP2X) && !defined(DINGUX) && !defined(OPENPANDORA) && !defined(PLAYSTATION3) && !defined(DISPMANX) +#if defined(POSIX) && !defined(MACOSX) && !defined(SAMSUNGTV) && !defined(MAEMO) && !defined(WEBOS) && !defined(LINUXMOTO) && !defined(GPH_DEVICE) && !defined(GP2X) && !defined(DINGUX) && !defined(OPENPANDORA) && !defined(PLAYSTATION3) #include "backends/platform/sdl/posix/posix.h" #include "backends/plugins/sdl/sdl-provider.h" diff --git a/backends/platform/sdl/raspberrypi/README.RASPBERRYPI b/backends/platform/sdl/raspberrypi/README.RASPBERRYPI index f8d872b519..ab0e674c31 100644 --- a/backends/platform/sdl/raspberrypi/README.RASPBERRYPI +++ b/backends/platform/sdl/raspberrypi/README.RASPBERRYPI @@ -4,12 +4,9 @@ ScummVM-RASPBERRYPI README Notes ============ -This version of ScummVM is specially tailored to use DispmanX, the native 2D -API on the Raspberry Pi. The idea is that scaling and drawing on a double -buffer with a non-blocking vsync wait is all done using the on-board VideoCore -hardware, thus using only a small fraction of the CPU ScummVM uses when ran -on a clunky, software-scaled and desynced X11 environment using the X11 API. -Thus, running this version under an X11 session is not supported. +This version of ScummVM uses SDL2 hardware accelerated graphics, be it +plain SDL2 which in turn uses dispmanx/gles2 or by using gles1 via an +SDL2-configured GLES1 context. Requirements ============ @@ -67,40 +64,14 @@ works as in any other system ScummVM runs on. Building from sources ============================== -We have two options to build once we have the sources in our main GNU/Linux desktop -class PC or in our Raspberry Pi: +Recommended method is building by cross-compiling on a GNU/Linux X86-based computer. +You can find concise instructions for this on the ScummVM wiki: -1) Building on the Raspberry Pi itself, although possible, is an SLOW task for the -little computer unless you use distributed gcc (or distcc for short). - -Local compilation would simply consist of the "standard" GNU/Linux building process: - -cd - -./configure --enable-dispmanx -disable-debug --enable-release ---enable-optimizations --disable-mt32emu --disable-flac --disable-mad --disable-vorbis ---disable-tremor --disable-fluidsynth --disable-taskbar --disable-timidity --disable-alsa ---disable-scalers --disable-hq-scalers --disable-savegame-timestamp --disable-eventrecorder - -make +http://wiki.scummvm.org/index.php/Compiling_ScummVM/RPI -As you can see, we're manually disabling scalers because we prefer dispmanx for that, which +The configure script is disabling scalers because we prefer dispmanx for that, which makes scalers unnecessary on a CPU limited platform like this, timestamps because most people doesn't have an RTC on the Raspberry Pi, and event recorder to save SD card write cycles. -All these are automatically disabled when we crosscompile by passing "--host=raspberrypi", -which is not the case. - -¡¡It will be an SLOW process, taking several hours to complete, unless you -are running distcc against a fast compilation server!! - -2) If we want to build by cross-compiling on a GNU/Linux X86-based computer, -we can find concise instructions for this can be found on the ScummVM wiki: - -http://wiki.scummvm.org/index.php/Compiling_ScummVM/RPI - -NOTE: Distcc is my preferred method as it does cross-compiling totally transparent -(we build ON the Pi but the actual CPU-intensive compilation is made on an external -server), but it involves building a custom gcc version on the compilation server and -configuring a server and client in both the Raspberry Pi and the server. +All these are automatically disabled when we crosscompile by passing "--host=raspberrypi". Enjoy! diff --git a/backends/platform/sdl/raspberrypi/raspberrypi-main.cpp b/backends/platform/sdl/raspberrypi/raspberrypi-main.cpp deleted file mode 100644 index cddbcb7ec4..0000000000 --- a/backends/platform/sdl/raspberrypi/raspberrypi-main.cpp +++ /dev/null @@ -1,51 +0,0 @@ -/* ScummVM - Graphic Adventure Engine - * - * ScummVM is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include "backends/platform/sdl/raspberrypi/raspberrypi.h" -#include "backends/plugins/sdl/sdl-provider.h" -#include "common/scummsys.h" -#include "base/main.h" - -#if defined(DISPMANX) -int main(int argc, char* argv[]) { - - // Create our OSystem instance - g_system = new OSystem_SDL_RaspberryPi(); - assert(g_system); - - // Pre initialize the backend - ((OSystem_SDL_RaspberryPi *)g_system)->init(); - -#ifdef DYNAMIC_MODULES - PluginManager::instance().addPluginProvider(new SDLPluginProvider()); -#endif - - // Invoke the actual ScummVM main entry point: - int res = scummvm_main(argc, argv); - - // Free OSystem - delete (OSystem_SDL_RaspberryPi *)g_system; - - return res; -} - -#endif diff --git a/backends/platform/sdl/raspberrypi/raspberrypi.cpp b/backends/platform/sdl/raspberrypi/raspberrypi.cpp deleted file mode 100644 index 206203d82e..0000000000 --- a/backends/platform/sdl/raspberrypi/raspberrypi.cpp +++ /dev/null @@ -1,42 +0,0 @@ -/* ScummVM - Graphic Adventure Engine - * - * ScummVM is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#if defined(DISPMANX) - -#include "backends/platform/sdl/raspberrypi/raspberrypi.h" -#include "backends/graphics/dispmanxsdl/dispmanxsdl-graphics.h" - -void OSystem_SDL_RaspberryPi::initBackend() { - // Create the events manager - if (_eventSource == 0) - _eventSource = new SdlEventSource(); - - // Create the graphics manager - if (_graphicsManager == 0) { - _graphicsManager = new DispmanXSdlGraphicsManager(_eventSource, _window); - } - - // Call parent implementation of this method - OSystem_POSIX::initBackend(); -} - -#endif diff --git a/backends/platform/sdl/raspberrypi/raspberrypi.h b/backends/platform/sdl/raspberrypi/raspberrypi.h deleted file mode 100644 index 45e2c505f6..0000000000 --- a/backends/platform/sdl/raspberrypi/raspberrypi.h +++ /dev/null @@ -1,35 +0,0 @@ -/* ScummVM - Graphic Adventure Engine - * - * ScummVM is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef SDL_DISPMANX_COMMON_H -#define SDL_DISPMANX_COMMON_H - -#if defined(DISPMANX) -#include "backends/platform/sdl/posix/posix.h" - -class OSystem_SDL_RaspberryPi : public OSystem_POSIX { -public: - void initBackend(); -}; - -#endif /* DISPMANX */ -#endif /* SDL_DISPMANX_COMMON_H */ diff --git a/configure b/configure index 561bd1e5ab..cb903feacb 100755 --- a/configure +++ b/configure @@ -135,7 +135,6 @@ _faad=auto _fluidsynth=auto _opengl=auto _opengles=auto -_dispmanx=no _readline=auto _freetype2=auto _taskbar=auto @@ -1061,8 +1060,6 @@ for ac_option in $@; do --disable-libunity) _libunity=no ;; --enable-opengl) _opengl=yes ;; --disable-opengl) _opengl=no ;; - --enable-dispmanx) _dispmanx=yes ;; - --disable-dispmanx) _dispmanx=no ;; --enable-bink) _bink=yes ;; --disable-bink) _bink=no ;; --enable-verbose-build) _verbose_build=yes ;; @@ -2574,15 +2571,13 @@ if test -n "$_host"; then # This is needed because the official cross compiler doesn't have multiarch enabled # but Raspbian does. # Be careful as it's the linker (LDFLAGS) which must know about sysroot. - # These are needed to build against Raspbian's libSDL even if we don't activate - # dispmanx support. + # These are needed to build against Raspbian's libSDL. append_var LDFLAGS "--sysroot=$RPI_ROOT" append_var LDFLAGS "-B$RPI_ROOT/usr/lib/arm-linux-gnueabihf" append_var LDFLAGS "-Xlinker --rpath-link=$RPI_ROOT/usr/lib/arm-linux-gnueabihf" append_var LDFLAGS "-Xlinker --rpath-link=$RPI_ROOT/lib/arm-linux-gnueabihf" append_var LDFLAGS "-Xlinker --rpath-link=$RPI_ROOT/opt/vc/lib" append_var LDFLAGS "-L$RPI_ROOT/opt/vc/lib" - append_var LDFLAGS "-L/opt/rpi_root/lib/arm-linux-gnueabihf -L$RPI_ROOT/usr/lib -L$RPI_ROOT/opt/vc/lib -lbcm_host -lvcos" # This is so optional OpenGL ES includes are found. append_var CXXFLAGS "-I$RPI_ROOT/opt/vc/include" _savegame_timestamp=no @@ -4115,35 +4110,6 @@ fi define_in_config_if_yes "$_opengl" "USE_OPENGL" define_in_config_if_yes "$_opengles" "USE_GLES" -# Check if Raspberry Pi's Dispmanx graphics have been enabled and everything is in place. -# If dispmanx is disabled, we fall back to plain SDL rendering. -if test "$_dispmanx" = "yes" ; then - echocheck "DispmanX graphics" - _use_dispmanx=no - - # These are only needed if, appart from cross-building for Raspberry Pi, - # we are activating dispmanx support. - DISPMANX_CXXFLAGS="-I$RPI_ROOT/usr/include -I$RPI_ROOT/usr/include/arm-linux-gnueabihf -I$RPI_ROOT/opt/vc/include -I$RPI_ROOT/opt/vc/include/interface/vmcs_host/linux -I$RPI_ROOT/opt/vc/include/interface/vcos/pthreads -I$RPI_ROOT/usr/include/SDL" - DISPMANX_LIBS="$RPI_LIBS -L/opt/rpi_root/lib/arm-linux-gnueabihf -L$RPI_ROOT/usr/lib -L$RPI_ROOT/opt/vc/lib -lbcm_host -lvcos -lvchiq_arm" - - cat > $TMPC << EOF -#include - - int main(int argc, char *argv[]) { - bcm_host_init(); -} -EOF - cc_check $DISPMANX_CXXFLAGS $DISPMANX_LIBS && _use_dispmanx=yes - if test "$_use_dispmanx" = "yes"; then - append_var CXXFLAGS "$DISPMANX_CXXFLAGS" - append_var LIBS "$DISPMANX_LIBS" - append_var DEFINES "-DDISPMANX" - add_line_to_config_mk 'DISPMANX = 1' - echo $_use_dispmanx - else echo "no" - fi -fi - # # Check for nasm # -- cgit v1.2.3 From 6deb5ecc881145b7d7718de5da2c64c6eb80c199 Mon Sep 17 00:00:00 2001 From: vanfanel Date: Fri, 4 Dec 2015 16:48:27 +0100 Subject: RASPBERRYPI: Prefer SDL2 over SDL1.2. --- configure | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/configure b/configure index cb903feacb..402e84b271 100755 --- a/configure +++ b/configure @@ -2589,6 +2589,10 @@ if test -n "$_host"; then if test "$_opengl" = yes; then _opengles=yes fi + # We prefer SDL2 on the Raspberry Pi: acceleration now depends on it + # since SDL2 manages dispmanx/GLES2 very well internally. + # SDL1 is bit-rotten on this platform. + _sdlconfig=sdl2-config ;; dreamcast) append_var DEFINES "-DDISABLE_DEFAULT_SAVEFILEMANAGER" -- cgit v1.2.3 From ae1be06db831e9480a060ef513aad6819be5cdd0 Mon Sep 17 00:00:00 2001 From: vanfanel Date: Tue, 8 Dec 2015 18:44:15 +0100 Subject: RASPBERRYPI: Disable OpenGL ES because it offers no advantage over SDL2. --- configure | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/configure b/configure index 402e84b271..87070f5663 100755 --- a/configure +++ b/configure @@ -2584,15 +2584,12 @@ if test -n "$_host"; then _eventrec=no _build_scalers=no _build_hq_scalers=no - # This is so OpenGL detection works for OpenGL ES, only if OpenGL has been - # explicitly activated. - if test "$_opengl" = yes; then - _opengles=yes - fi # We prefer SDL2 on the Raspberry Pi: acceleration now depends on it # since SDL2 manages dispmanx/GLES2 very well internally. # SDL1 is bit-rotten on this platform. _sdlconfig=sdl2-config + # We should add _opengles=yes later here if we wanted the GLES renderer. + # For now, we use plain SDL2 only, which in turn uses GLES2 by default. ;; dreamcast) append_var DEFINES "-DDISABLE_DEFAULT_SAVEFILEMANAGER" -- cgit v1.2.3 From 407a5a1f55060b85e6743db53223e610e6e4184c Mon Sep 17 00:00:00 2001 From: Jakub Wilk Date: Wed, 9 Dec 2015 23:02:01 +0100 Subject: SWORD25: Fix typo --- engines/sword25/math/polygon.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engines/sword25/math/polygon.cpp b/engines/sword25/math/polygon.cpp index ccefa1901e..99a0d37ed7 100644 --- a/engines/sword25/math/polygon.cpp +++ b/engines/sword25/math/polygon.cpp @@ -110,7 +110,7 @@ bool Polygon::computeIsCW() const { // Cross product form // If the cross product of the vertex lying fartherest bottom left is positive, - // the vertecies arrranged in a clockwise order. Otherwise counter-clockwise + // the vertecies arranged in a clockwise order. Otherwise counter-clockwise if (crossProduct(vertices[v1Index], vertices[v2Index], vertices[v3Index]) >= 0) return true; } -- cgit v1.2.3 From c8acaff52146e6b88cd82c344252c14faf985ba9 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 9 Dec 2015 21:44:08 -0500 Subject: SHERLOCK: Add validation for journal entry values --- engines/sherlock/journal.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/engines/sherlock/journal.cpp b/engines/sherlock/journal.cpp index e443b6f727..c4aaa07a73 100644 --- a/engines/sherlock/journal.cpp +++ b/engines/sherlock/journal.cpp @@ -715,6 +715,15 @@ void Journal::record(int converseNum, int statementNum, bool replyOnly) { return; } + // Do a bit of validation here + assert(converseNum >= 0 && converseNum < (int)_directory.size()); + const Common::String &dirFilename = _directory[converseNum]; + Common::String locStr(dirFilename.c_str() + 4, dirFilename.c_str() + 6); + int newLocation = atoi(locStr.c_str()); + assert(newLocation >= 1 && newLocation <= (int)_locations.size()); + assert(!_locations[newLocation - 1].empty()); + assert(statementNum >= 0 && statementNum < (int)_vm->_talk->_statements.size()); + // Record the entry into the list _journal.push_back(JournalEntry(converseNum, statementNum, replyOnly)); _index = _journal.size() - 1; @@ -726,7 +735,7 @@ void Journal::record(int converseNum, int statementNum, bool replyOnly) { _index = saveIndex; _sub = saveSub; - // If new lines were added to the ournal, update the total number of lines + // If new lines were added to the journal, update the total number of lines // the journal continues if (!_lines.empty()) { _maxPage += _lines.size(); -- cgit v1.2.3 From f857859041e15d36a88e7843d289024962ddb1b1 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 10 Dec 2015 20:20:51 -0500 Subject: ACCESS: Fix showing inventory after loading a close-up savegame --- engines/access/asurface.cpp | 7 +++++++ engines/access/asurface.h | 4 +++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/engines/access/asurface.cpp b/engines/access/asurface.cpp index abae6bf703..cb51431657 100644 --- a/engines/access/asurface.cpp +++ b/engines/access/asurface.cpp @@ -294,6 +294,13 @@ void ASurface::copyBlock(ASurface *src, const Common::Rect &bounds) { copyRectToSurface(*src, bounds.left, bounds.top, bounds); } +void ASurface::copyTo(ASurface *dest) { + if (dest->empty()) + dest->create(this->w, this->h); + + dest->blitFrom(*this); +} + void ASurface::saveBlock(const Common::Rect &bounds) { _savedBounds = bounds; _savedBounds.clip(Common::Rect(0, 0, this->w, this->h)); diff --git a/engines/access/asurface.h b/engines/access/asurface.h index ce9928c00e..dd05c8067b 100644 --- a/engines/access/asurface.h +++ b/engines/access/asurface.h @@ -63,6 +63,8 @@ public: void create(uint16 width, uint16 height); + bool empty() const { return w == 0 || h == 0 || pixels == nullptr; } + void clearBuffer(); bool clip(Common::Rect &r); @@ -113,7 +115,7 @@ public: virtual void addDirtyRect(const Common::Rect &r) {} - void copyTo(ASurface *dest) { dest->blitFrom(*this); } + void copyTo(ASurface *dest); void saveBlock(const Common::Rect &bounds); -- cgit v1.2.3 From e6f3b9d29f0fc695a616323be133f579c309388b Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 10 Dec 2015 22:28:59 -0500 Subject: ACCESS: Workaround for bad floppy English anim for librarian --- engines/access/animation.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/engines/access/animation.cpp b/engines/access/animation.cpp index 14d7c0d4cc..259396f37e 100644 --- a/engines/access/animation.cpp +++ b/engines/access/animation.cpp @@ -53,6 +53,13 @@ Animation::Animation(AccessEngine *vm, Common::SeekableReadStream *stream) : Man uint32 startOfs = stream->pos(); _type = stream->readByte(); + + // WORKAROUND: In Amazon floppy English, there's an animation associated with + // the librarian that isn't used, and has junk data. Luckily, it's animation + // type is also invalid, so if the _type isn't in range, exit immediately + if (_type < 0 || _type > 7) + return; + _scaling = stream->readSByte(); stream->readByte(); // unk _frameNumber = stream->readByte(); -- cgit v1.2.3 From 7b671f42bca024e628ba2a2c1559c88cfc3eb6ba Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 10 Dec 2015 22:37:56 -0500 Subject: ACCESS: Fix crash when talking to Librarian --- engines/access/bubble_box.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/engines/access/bubble_box.cpp b/engines/access/bubble_box.cpp index df8adc1bc6..831ba507a1 100644 --- a/engines/access/bubble_box.cpp +++ b/engines/access/bubble_box.cpp @@ -95,8 +95,9 @@ void BubbleBox::placeBubble1(const Common::String &msg) { void BubbleBox::calcBubble(const Common::String &msg) { // Save points - Common::Point printOrg = _vm->_screen->_printOrg; - Common::Point printStart = _vm->_screen->_printStart; + Screen &screen = *_vm->_screen; + Common::Point printOrg = screen._printOrg; + Common::Point printStart = screen._printStart; // Figure out maximum width allowed if (_type == kBoxTypeFileDialog) { @@ -114,15 +115,15 @@ void BubbleBox::calcBubble(const Common::String &msg) { int width = 0; bool lastLine; do { - lastLine = _vm->_fonts._font2.getLine(s, _vm->_screen->_maxChars * 6, line, width); + lastLine = _vm->_fonts._font2.getLine(s, screen._maxChars * 6, line, width); _vm->_fonts._printMaxX = MAX(width, _vm->_fonts._printMaxX); - _vm->_screen->_printOrg.y += 6; - _vm->_screen->_printOrg.x = _vm->_screen->_printStart.x; + screen._printOrg.y += 6; + screen._printOrg.x = screen._printStart.x; } while (!lastLine); if (_type == kBoxTypeFileDialog) - ++_vm->_screen->_printOrg.y += 6; + ++screen._printOrg.y += 6; // Determine the width for the area width = (((_vm->_fonts._printMaxX >> 4) + 1) << 4) + 5; @@ -131,7 +132,7 @@ void BubbleBox::calcBubble(const Common::String &msg) { bounds.setWidth(width); // Determine the height for area - int y = _vm->_screen->_printOrg.y + 6; + int y = screen._printOrg.y + 6; if (_type == kBoxTypeFileDialog) y += 6; int height = y - bounds.top; @@ -141,6 +142,9 @@ void BubbleBox::calcBubble(const Common::String &msg) { if (height >= 0) bounds.setHeight(bounds.height() + 13 - (height % 13)); + if (bounds.bottom > screen.h) + bounds.translate(0, screen.h - bounds.bottom); + // Add the new bounds to the bubbles list _bubbles.push_back(bounds); -- cgit v1.2.3 From 642928f6c9030b2c744793a1c03f988cc52e85a3 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 10 Dec 2015 23:05:24 -0500 Subject: ACCESS: Fix clearing speech bubbles that overlap the response buttons --- engines/access/char.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/engines/access/char.cpp b/engines/access/char.cpp index 2afb81db30..cbe1d5d3d9 100644 --- a/engines/access/char.cpp +++ b/engines/access/char.cpp @@ -164,6 +164,10 @@ void CharManager::charMenu() { } else error("Game not supported"); + // Make a backup copy of the screen including the character buttons, + // for restoring when erasing conversation boxes + screen.copyTo(&_vm->_buffer1); + screen.restoreScreen(); delete spr; } -- cgit v1.2.3 From 9b848dc7bd48d7e1088b4fe2f26ea863aea3396d Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Fri, 11 Dec 2015 21:36:40 -0500 Subject: ACCESS: Add a constant for transparency --- engines/access/asurface.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/engines/access/asurface.cpp b/engines/access/asurface.cpp index cb51431657..f693e6a3a0 100644 --- a/engines/access/asurface.cpp +++ b/engines/access/asurface.cpp @@ -28,6 +28,8 @@ namespace Access { +const int TRANSPARENCY = 0; + SpriteResource::SpriteResource(AccessEngine *vm, Resource *res) { Common::Array offsets; int count = res->_stream->readUint16LE(); @@ -64,7 +66,7 @@ SpriteFrame::SpriteFrame(AccessEngine *vm, Common::SeekableReadStream *stream, i // Empty surface byte *data = (byte *)getPixels(); - Common::fill(data, data + w * h, 0); + Common::fill(data, data + w * h, TRANSPARENCY); // Decode the data for (int y = 0; y < h; ++y) { @@ -202,7 +204,7 @@ void ASurface::transBlitFrom(ASurface *src, const Common::Point &destPos) { byte *destP = (byte *)getBasePtr(destPos.x, destPos.y + yp); for (int xp = 0; xp < this->w; ++xp, ++srcP, ++destP) { - if (*srcP != 0) + if (*srcP != TRANSPARENCY) *destP = *srcP; } } -- cgit v1.2.3 From 95ac0214aea59b777d61367a101dc7d932280d34 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Fri, 11 Dec 2015 21:37:42 -0500 Subject: ACCESS: Fix palette for inventory window --- engines/access/inventory.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/engines/access/inventory.cpp b/engines/access/inventory.cpp index d4a869be28..0a962aa69a 100644 --- a/engines/access/inventory.cpp +++ b/engines/access/inventory.cpp @@ -120,6 +120,7 @@ int InventoryManager::newDisplayInv() { getList(); initFields(); + files._setPaletteFlag = false; files.loadScreen(&_vm->_buffer1, 99, 0); _vm->_buffer1.copyTo(&_vm->_buffer2); _vm->copyBF2Vid(); -- cgit v1.2.3 From d4bbf4d2503f7d89094db64e85e6bd5c4c2b38e8 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Fri, 11 Dec 2015 22:42:18 -0500 Subject: ACCESS: Fix differences in floppy chapter changes --- engines/access/amazon/amazon_game.cpp | 36 +++++++++++++++++--------------- engines/access/amazon/amazon_scripts.cpp | 17 +++++++++++++++ engines/access/scripts.h | 2 +- 3 files changed, 37 insertions(+), 18 deletions(-) diff --git a/engines/access/amazon/amazon_game.cpp b/engines/access/amazon/amazon_game.cpp index cf90beae96..3bb19676e8 100644 --- a/engines/access/amazon/amazon_game.cpp +++ b/engines/access/amazon/amazon_game.cpp @@ -640,25 +640,27 @@ void AmazonEngine::startChapter(int chapter) { _room->init4Quads(); } - if (chapter == 14) { - _conversation = 31; - _char->loadChar(_conversation); - _events->setCursor(CURSOR_ARROW); - - _images.clear(); - _oldRects.clear(); - _scripts->_sequence = 0; - _scripts->searchForSequence(); + if (isCD()) { + if (chapter == 14) { + _conversation = 31; + _char->loadChar(_conversation); + _events->setCursor(CURSOR_ARROW); + + _images.clear(); + _oldRects.clear(); + _scripts->_sequence = 0; + _scripts->searchForSequence(); + + if (_screen->_vesaMode) { + _converseMode = 1; + } + } else if (chapter != 1) { + _player->_roomNumber = CHAPTER_JUMP[_chapter - 1]; + _room->_function = FN_CLEAR1; + _converseMode = 0; - if (_screen->_vesaMode) { - _converseMode = 1; + _scripts->cmdRetPos(); } - } else if (chapter != 1) { - _player->_roomNumber = CHAPTER_JUMP[_chapter - 1]; - _room->_function = FN_CLEAR1; - _converseMode = 0; - - _scripts->cmdRetPos(); } } diff --git a/engines/access/amazon/amazon_scripts.cpp b/engines/access/amazon/amazon_scripts.cpp index 9ff6a2952d..48438e9c95 100644 --- a/engines/access/amazon/amazon_scripts.cpp +++ b/engines/access/amazon/amazon_scripts.cpp @@ -473,12 +473,29 @@ void AmazonScripts::cmdCycleBack() { if (_vm->_startup == -1) _vm->_screen->cyclePaletteBackwards(); } + void AmazonScripts::cmdChapter() { + Resource *activeScript = nullptr; + if (_vm->isDemo()) { cmdSetHelp(); } else { int chapter = _data->readByte(); + + if (!_vm->isCD()) { + // For floppy version, the current script remains active even + // after the end of the chapter start, so we need to save it + activeScript = _resource; + _resource = nullptr; + _data = nullptr; + } + _game->startChapter(chapter); + + if (!_vm->isCD()) { + assert(!_resource); + setScript(activeScript, false); + } } } diff --git a/engines/access/scripts.h b/engines/access/scripts.h index 07fd6acfb1..4cfedf3b3f 100644 --- a/engines/access/scripts.h +++ b/engines/access/scripts.h @@ -39,13 +39,13 @@ typedef void(Scripts::*ScriptMethodPtr)(); class Scripts : public Manager { private: - Resource *_resource; int _specialFunction; void clearWatch(); void printWatch(); protected: + Resource *_resource; Common::SeekableReadStream *_data; ScriptMethodPtr COMMAND_LIST[100]; -- cgit v1.2.3 From 5d1df1c2933b110e8edbe94f153c5d4c0ca022d3 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Sat, 12 Dec 2015 05:39:48 +0100 Subject: DEVTOOLS: Prefix varibles in structs/classes with '_' in xcode.[h/cpp]. This silences some variables and increases consistency with our code formatting conventions. --- devtools/create_project/xcode.cpp | 238 +++++++++++++++++++------------------- devtools/create_project/xcode.h | 128 ++++++++++---------- 2 files changed, 183 insertions(+), 183 deletions(-) diff --git a/devtools/create_project/xcode.cpp b/devtools/create_project/xcode.cpp index babd530ad7..657adbc80f 100644 --- a/devtools/create_project/xcode.cpp +++ b/devtools/create_project/xcode.cpp @@ -42,42 +42,42 @@ namespace CreateProjectTool { defines.push_back(name); #define ADD_SETTING(config, key, value) \ - config.settings[key] = Setting(value, "", SettingsNoQuote); + config._settings[key] = Setting(value, "", SettingsNoQuote); #define ADD_SETTING_ORDER(config, key, value, order) \ - config.settings[key] = Setting(value, "", SettingsNoQuote, 0, order); + config._settings[key] = Setting(value, "", SettingsNoQuote, 0, order); #define ADD_SETTING_ORDER_NOVALUE(config, key, comment, order) \ - config.settings[key] = Setting("", comment, SettingsNoValue, 0, order); + config._settings[key] = Setting("", comment, SettingsNoValue, 0, order); #define ADD_SETTING_QUOTE(config, key, value) \ - config.settings[key] = Setting(value); + config._settings[key] = Setting(value); #define ADD_SETTING_QUOTE_VAR(config, key, value) \ - config.settings[key] = Setting(value, "", SettingsQuoteVariable); + config._settings[key] = Setting(value, "", SettingsQuoteVariable); #define ADD_SETTING_LIST(config, key, values, flags, indent) \ - config.settings[key] = Setting(values, flags, indent); + config._settings[key] = Setting(values, flags, indent); #define REMOVE_SETTING(config, key) \ - config.settings.erase(key); + config._settings.erase(key); #define ADD_BUILD_FILE(id, name, fileRefId, comment) { \ Object *buildFile = new Object(this, id, name, "PBXBuildFile", "PBXBuildFile", comment); \ buildFile->addProperty("fileRef", fileRefId, name, SettingsNoValue); \ _buildFile.add(buildFile); \ - _buildFile.flags = SettingsSingleItem; \ + _buildFile._flags = SettingsSingleItem; \ } #define ADD_FILE_REFERENCE(id, name, properties) { \ Object *fileRef = new Object(this, id, name, "PBXFileReference", "PBXFileReference", name); \ - if (!properties.fileEncoding.empty()) fileRef->addProperty("fileEncoding", properties.fileEncoding, "", SettingsNoValue); \ - if (!properties.lastKnownFileType.empty()) fileRef->addProperty("lastKnownFileType", properties.lastKnownFileType, "", SettingsNoValue|SettingsQuoteVariable); \ - if (!properties.fileName.empty()) fileRef->addProperty("name", properties.fileName, "", SettingsNoValue|SettingsQuoteVariable); \ - if (!properties.filePath.empty()) fileRef->addProperty("path", properties.filePath, "", SettingsNoValue|SettingsQuoteVariable); \ - if (!properties.sourceTree.empty()) fileRef->addProperty("sourceTree", properties.sourceTree, "", SettingsNoValue); \ + if (!properties._fileEncoding.empty()) fileRef->addProperty("fileEncoding", properties._fileEncoding, "", SettingsNoValue); \ + if (!properties._lastKnownFileType.empty()) fileRef->addProperty("lastKnownFileType", properties._lastKnownFileType, "", SettingsNoValue|SettingsQuoteVariable); \ + if (!properties._fileName.empty()) fileRef->addProperty("name", properties._fileName, "", SettingsNoValue|SettingsQuoteVariable); \ + if (!properties._filePath.empty()) fileRef->addProperty("path", properties._filePath, "", SettingsNoValue|SettingsQuoteVariable); \ + if (!properties._sourceTree.empty()) fileRef->addProperty("sourceTree", properties._sourceTree, "", SettingsNoValue); \ _fileReference.add(fileRef); \ - _fileReference.flags = SettingsSingleItem; \ + _fileReference._flags = SettingsSingleItem; \ } bool producesObjectFileOnOSX(const std::string &fileName) { @@ -93,7 +93,7 @@ bool producesObjectFileOnOSX(const std::string &fileName) { } XcodeProvider::Group::Group(XcodeProvider *objectParent, const std::string &groupName, const std::string &uniqueName, const std::string &path) : Object(objectParent, uniqueName, groupName, "PBXGroup", "", groupName) { - addProperty("name", name, "", SettingsNoValue|SettingsQuoteVariable); + addProperty("name", _name, "", SettingsNoValue|SettingsQuoteVariable); addProperty("sourceTree", "", "", SettingsNoValue|SettingsQuoteVariable); if (path != "") { @@ -106,43 +106,43 @@ XcodeProvider::Group::Group(XcodeProvider *objectParent, const std::string &grou void XcodeProvider::Group::ensureChildExists(const std::string &name) { std::map::iterator it = _childGroups.find(name); if (it == _childGroups.end()) { - Group *child = new Group(parent, name, this->_treeName + '/' + name, name); + Group *child = new Group(_parent, name, this->_treeName + '/' + name, name); _childGroups[name] = child; addChildGroup(child); - parent->_groups.add(child); + _parent->_groups.add(child); } } void XcodeProvider::Group::addChildInternal(const std::string &id, const std::string &comment) { - if (properties.find("children") == properties.end()) { + if (_properties.find("children") == _properties.end()) { Property children; - children.hasOrder = true; - children.flags = SettingsAsList; - properties["children"] = children; + children._hasOrder = true; + children._flags = SettingsAsList; + _properties["children"] = children; } - properties["children"].settings[id] = Setting("", comment + " in Sources", SettingsNoValue, 0, _childOrder++); + _properties["children"]._settings[id] = Setting("", comment + " in Sources", SettingsNoValue, 0, _childOrder++); if (_childOrder == 1) { // Force children to use () even when there is only 1 child. // Also this enforces the use of "," after the single item, instead of ; (see writeProperty) - properties["children"].flags |= SettingsSingleItem; + _properties["children"]._flags |= SettingsSingleItem; } else { - properties["children"].flags ^= SettingsSingleItem; + _properties["children"]._flags ^= SettingsSingleItem; } } void XcodeProvider::Group::addChildGroup(const Group* group) { - addChildInternal(parent->getHash(group->_treeName), group->_treeName); + addChildInternal(_parent->getHash(group->_treeName), group->_treeName); } void XcodeProvider::Group::addChildFile(const std::string &name) { std::string id = "FileReference_" + _treeName + "/" + name; - addChildInternal(parent->getHash(id), name); + addChildInternal(_parent->getHash(id), name); FileProperty property = FileProperty(name, name, name, "\"\""); - parent->addFileReference(id, name, property); + _parent->addFileReference(id, name, property); if (producesObjectFileOnOSX(name)) { - parent->addBuildFile(_treeName + "/" + name, name, parent->getHash(id), name + " in Sources"); + _parent->addBuildFile(_treeName + "/" + name, name, _parent->getHash(id), name + " in Sources"); } } @@ -180,13 +180,13 @@ XcodeProvider::Group *XcodeProvider::touchGroupsForPath(const std::string &path) void XcodeProvider::addFileReference(const std::string &id, const std::string &name, FileProperty properties) { Object *fileRef = new Object(this, id, name, "PBXFileReference", "PBXFileReference", name); - if (!properties.fileEncoding.empty()) fileRef->addProperty("fileEncoding", properties.fileEncoding, "", SettingsNoValue); - if (!properties.lastKnownFileType.empty()) fileRef->addProperty("lastKnownFileType", properties.lastKnownFileType, "", SettingsNoValue|SettingsQuoteVariable); - if (!properties.fileName.empty()) fileRef->addProperty("name", properties.fileName, "", SettingsNoValue|SettingsQuoteVariable); - if (!properties.filePath.empty()) fileRef->addProperty("path", properties.filePath, "", SettingsNoValue|SettingsQuoteVariable); - if (!properties.sourceTree.empty()) fileRef->addProperty("sourceTree", properties.sourceTree, "", SettingsNoValue); + if (!properties._fileEncoding.empty()) fileRef->addProperty("fileEncoding", properties._fileEncoding, "", SettingsNoValue); + if (!properties._lastKnownFileType.empty()) fileRef->addProperty("lastKnownFileType", properties._lastKnownFileType, "", SettingsNoValue|SettingsQuoteVariable); + if (!properties._fileName.empty()) fileRef->addProperty("name", properties._fileName, "", SettingsNoValue|SettingsQuoteVariable); + if (!properties._filePath.empty()) fileRef->addProperty("path", properties._filePath, "", SettingsNoValue|SettingsQuoteVariable); + if (!properties._sourceTree.empty()) fileRef->addProperty("sourceTree", properties._sourceTree, "", SettingsNoValue); _fileReference.add(fileRef); - _fileReference.flags = SettingsSingleItem; + _fileReference._flags = SettingsSingleItem; } void XcodeProvider::addProductFileReference(const std::string &id, const std::string &name) { @@ -196,7 +196,7 @@ void XcodeProvider::addProductFileReference(const std::string &id, const std::st fileRef->addProperty("path", name, "", SettingsNoValue|SettingsQuoteVariable); fileRef->addProperty("sourceTree", "BUILT_PRODUCTS_DIR", "", SettingsNoValue); _fileReference.add(fileRef); - _fileReference.flags = SettingsSingleItem; + _fileReference._flags = SettingsSingleItem; } void XcodeProvider::addBuildFile(const std::string &id, const std::string &name, const std::string &fileRefId, const std::string &comment) { @@ -204,7 +204,7 @@ void XcodeProvider::addBuildFile(const std::string &id, const std::string &name, Object *buildFile = new Object(this, id, name, "PBXBuildFile", "PBXBuildFile", comment); buildFile->addProperty("fileRef", fileRefId, name, SettingsNoValue); _buildFile.add(buildFile); - _buildFile.flags = SettingsSingleItem; + _buildFile._flags = SettingsSingleItem; } XcodeProvider::XcodeProvider(StringList &global_warnings, std::map &project_warnings, const int version) @@ -343,14 +343,14 @@ void XcodeProvider::setupCopyFilesBuildPhase() { * (each native target has different build rules) */ void XcodeProvider::setupFrameworksBuildPhase() { - _frameworksBuildPhase.comment = "PBXFrameworksBuildPhase"; + _frameworksBuildPhase._comment = "PBXFrameworksBuildPhase"; // Just use a hardcoded id for the Frameworks-group Group *frameworksGroup = new Group(this, "Frameworks", "PBXGroup_CustomTemplate_Frameworks_", ""); Property children; - children.hasOrder = true; - children.flags = SettingsAsList; + children._hasOrder = true; + children._flags = SettingsAsList; // Setup framework file properties std::map properties; @@ -380,7 +380,7 @@ void XcodeProvider::setupFrameworksBuildPhase() { DEF_LOCALLIB_STATIC("libfreetype"); // DEF_LOCALLIB_STATIC("libmpeg2"); - frameworksGroup->properties["children"] = children; + frameworksGroup->_properties["children"] = children; _groups.add(frameworksGroup); // Force this to be added as a sub-group in the root. _rootSourceGroup->addChildGroup(frameworksGroup); @@ -398,8 +398,8 @@ void XcodeProvider::setupFrameworksBuildPhase() { // List of frameworks Property iPhone_files; - iPhone_files.hasOrder = true; - iPhone_files.flags = SettingsAsList; + iPhone_files._hasOrder = true; + iPhone_files._flags = SettingsAsList; ValueList frameworks_iPhone; frameworks_iPhone.push_back("CoreAudio.framework"); @@ -423,7 +423,7 @@ void XcodeProvider::setupFrameworksBuildPhase() { ADD_FILE_REFERENCE(*framework, *framework, properties[*framework]); } - framework_iPhone->properties["files"] = iPhone_files; + framework_iPhone->_properties["files"] = iPhone_files; _frameworksBuildPhase.add(framework_iPhone); #endif @@ -436,8 +436,8 @@ void XcodeProvider::setupFrameworksBuildPhase() { // List of frameworks Property osx_files; - osx_files.hasOrder = true; - osx_files.flags = SettingsAsList; + osx_files._hasOrder = true; + osx_files._flags = SettingsAsList; ValueList frameworks_osx; frameworks_osx.push_back("CoreFoundation.framework"); @@ -465,7 +465,7 @@ void XcodeProvider::setupFrameworksBuildPhase() { ADD_FILE_REFERENCE(*framework, *framework, properties[*framework]); } - framework_OSX->properties["files"] = osx_files; + framework_OSX->_properties["files"] = osx_files; _frameworksBuildPhase.add(framework_OSX); #ifdef ENABLE_IOS @@ -478,8 +478,8 @@ void XcodeProvider::setupFrameworksBuildPhase() { // List of frameworks Property simulator_files; - simulator_files.hasOrder = true; - simulator_files.flags = SettingsAsList; + simulator_files._hasOrder = true; + simulator_files._flags = SettingsAsList; ValueList frameworks_simulator; frameworks_simulator.push_back("CoreAudio.framework"); @@ -500,14 +500,14 @@ void XcodeProvider::setupFrameworksBuildPhase() { ADD_FILE_REFERENCE(*framework, *framework, properties[*framework]); } - framework_simulator->properties["files"] = simulator_files; + framework_simulator->_properties["files"] = simulator_files; _frameworksBuildPhase.add(framework_simulator); #endif } void XcodeProvider::setupNativeTarget() { - _nativeTarget.comment = "PBXNativeTarget"; + _nativeTarget._comment = "PBXNativeTarget"; // Just use a hardcoded id for the Products-group Group *productsGroup = new Group(this, "Products", "PBXGroup_CustomTemplate_Products_" , ""); @@ -523,12 +523,12 @@ void XcodeProvider::setupNativeTarget() { target->addProperty("buildConfigurationList", getHash("XCConfigurationList_" + _targets[i]), "Build configuration list for PBXNativeTarget \"" + _targets[i] + "\"", SettingsNoValue); Property buildPhases; - buildPhases.hasOrder = true; - buildPhases.flags = SettingsAsList; - buildPhases.settings[getHash("PBXResourcesBuildPhase_" + _targets[i])] = Setting("", "Resources", SettingsNoValue, 0, 0); - buildPhases.settings[getHash("PBXSourcesBuildPhase_" + _targets[i])] = Setting("", "Sources", SettingsNoValue, 0, 1); - buildPhases.settings[getHash("PBXFrameworksBuildPhase_" + _targets[i])] = Setting("", "Frameworks", SettingsNoValue, 0, 2); - target->properties["buildPhases"] = buildPhases; + buildPhases._hasOrder = true; + buildPhases._flags = SettingsAsList; + buildPhases._settings[getHash("PBXResourcesBuildPhase_" + _targets[i])] = Setting("", "Resources", SettingsNoValue, 0, 0); + buildPhases._settings[getHash("PBXSourcesBuildPhase_" + _targets[i])] = Setting("", "Sources", SettingsNoValue, 0, 1); + buildPhases._settings[getHash("PBXFrameworksBuildPhase_" + _targets[i])] = Setting("", "Frameworks", SettingsNoValue, 0, 2); + target->_properties["buildPhases"] = buildPhases; target->addProperty("buildRules", "", "", SettingsNoValue|SettingsAsList); @@ -548,7 +548,7 @@ void XcodeProvider::setupNativeTarget() { } void XcodeProvider::setupProject() { - _project.comment = "PBXProject"; + _project._comment = "PBXProject"; Object *project = new Object(this, "PBXProject", "PBXProject", "PBXProject", "", "Project object"); @@ -559,12 +559,12 @@ void XcodeProvider::setupProject() { // List of known regions Property regions; - regions.flags = SettingsAsList; + regions._flags = SettingsAsList; ADD_SETTING_ORDER_NOVALUE(regions, "English", "", 0); ADD_SETTING_ORDER_NOVALUE(regions, "Japanese", "", 1); ADD_SETTING_ORDER_NOVALUE(regions, "French", "", 2); ADD_SETTING_ORDER_NOVALUE(regions, "German", "", 3); - project->properties["knownRegions"] = regions; + project->_properties["knownRegions"] = regions; project->addProperty("mainGroup", _rootSourceGroup->getHashRef(), "CustomTemplate", SettingsNoValue); project->addProperty("projectDirPath", _projectRoot, "", SettingsNoValue|SettingsQuoteVariable); @@ -572,25 +572,25 @@ void XcodeProvider::setupProject() { // List of targets Property targets; - targets.flags = SettingsAsList; + targets._flags = SettingsAsList; #ifdef ENABLE_IOS - targets.settings[getHash("PBXNativeTarget_" + _targets[IOS_TARGET])] = Setting("", _targets[IOS_TARGET], SettingsNoValue, 0, 0); + targets._settings[getHash("PBXNativeTarget_" + _targets[IOS_TARGET])] = Setting("", _targets[IOS_TARGET], SettingsNoValue, 0, 0); #endif - targets.settings[getHash("PBXNativeTarget_" + _targets[OSX_TARGET])] = Setting("", _targets[OSX_TARGET], SettingsNoValue, 0, 1); + targets._settings[getHash("PBXNativeTarget_" + _targets[OSX_TARGET])] = Setting("", _targets[OSX_TARGET], SettingsNoValue, 0, 1); #ifdef ENABLE_IOS - targets.settings[getHash("PBXNativeTarget_" + _targets[SIM_TARGET])] = Setting("", _targets[SIM_TARGET], SettingsNoValue, 0, 2); + targets._settings[getHash("PBXNativeTarget_" + _targets[SIM_TARGET])] = Setting("", _targets[SIM_TARGET], SettingsNoValue, 0, 2); #endif - project->properties["targets"] = targets; + project->_properties["targets"] = targets; #ifndef ENABLE_IOS // Force list even when there is only a single target - project->properties["targets"].flags |= SettingsSingleItem; + project->_properties["targets"]._flags |= SettingsSingleItem; #endif _project.add(project); } void XcodeProvider::setupResourcesBuildPhase() { - _resourcesBuildPhase.comment = "PBXResourcesBuildPhase"; + _resourcesBuildPhase._comment = "PBXResourcesBuildPhase"; // Setup resource file properties std::map properties; @@ -619,8 +619,8 @@ void XcodeProvider::setupResourcesBuildPhase() { // Add default files Property files; - files.hasOrder = true; - files.flags = SettingsAsList; + files._hasOrder = true; + files._flags = SettingsAsList; ValueList files_list; files_list.push_back("scummclassic.zip"); @@ -651,14 +651,14 @@ void XcodeProvider::setupResourcesBuildPhase() { // Add custom files depending on the target if (_targets[i] == PROJECT_DESCRIPTION "-OS X") { - files.settings[getHash("PBXResources_" PROJECT_NAME ".icns")] = Setting("", PROJECT_NAME ".icns in Resources", SettingsNoValue, 0, 6); + files._settings[getHash("PBXResources_" PROJECT_NAME ".icns")] = Setting("", PROJECT_NAME ".icns in Resources", SettingsNoValue, 0, 6); // Remove 2 iphone icon files - files.settings.erase(getHash("PBXResources_Default.png")); - files.settings.erase(getHash("PBXResources_icon.png")); + files._settings.erase(getHash("PBXResources_Default.png")); + files._settings.erase(getHash("PBXResources_icon.png")); } - resource->properties["files"] = files; + resource->_properties["files"] = files; resource->addProperty("runOnlyForDeploymentPostprocessing", "0", "", SettingsNoValue); @@ -667,7 +667,7 @@ void XcodeProvider::setupResourcesBuildPhase() { } void XcodeProvider::setupSourcesBuildPhase() { - _sourcesBuildPhase.comment = "PBXSourcesBuildPhase"; + _sourcesBuildPhase._comment = "PBXSourcesBuildPhase"; // Setup source file properties std::map properties; @@ -679,19 +679,19 @@ void XcodeProvider::setupSourcesBuildPhase() { source->addProperty("buildActionMask", "2147483647", "", SettingsNoValue); Property files; - files.hasOrder = true; - files.flags = SettingsAsList; + files._hasOrder = true; + files._flags = SettingsAsList; int order = 0; - for (std::vector::iterator file = _buildFile.objects.begin(); file !=_buildFile.objects.end(); ++file) { - if (!producesObjectFileOnOSX((*file)->name)) { + for (std::vector::iterator file = _buildFile._objects.begin(); file !=_buildFile._objects.end(); ++file) { + if (!producesObjectFileOnOSX((*file)->_name)) { continue; } - std::string comment = (*file)->name + " in Sources"; - ADD_SETTING_ORDER_NOVALUE(files, getHash((*file)->id), comment, order++); + std::string comment = (*file)->_name + " in Sources"; + ADD_SETTING_ORDER_NOVALUE(files, getHash((*file)->_id), comment, order++); } - source->properties["files"] = files; + source->_properties["files"] = files; source->addProperty("runOnlyForDeploymentPostprocessing", "0", "", SettingsNoValue); @@ -702,8 +702,8 @@ void XcodeProvider::setupSourcesBuildPhase() { // Setup all build configurations void XcodeProvider::setupBuildConfiguration() { - _buildConfiguration.comment = "XCBuildConfiguration"; - _buildConfiguration.flags = SettingsAsList; + _buildConfiguration._comment = "XCBuildConfiguration"; + _buildConfiguration._flags = SettingsAsList; ///**************************************** // * iPhone @@ -749,7 +749,7 @@ void XcodeProvider::setupBuildConfiguration() { ADD_SETTING_QUOTE(iPhone_Debug, "TARGETED_DEVICE_FAMILY", "1,2"); iPhone_Debug_Object->addProperty("name", "Debug", "", SettingsNoValue); - iPhone_Debug_Object->properties["buildSettings"] = iPhone_Debug; + iPhone_Debug_Object->_properties["buildSettings"] = iPhone_Debug; // Release Object *iPhone_Release_Object = new Object(this, "XCBuildConfiguration_" PROJECT_DESCRIPTION "-iPhone_Release", _targets[IOS_TARGET] /* ScummVM-iPhone */, "XCBuildConfiguration", "PBXNativeTarget", "Release"); @@ -760,7 +760,7 @@ void XcodeProvider::setupBuildConfiguration() { ADD_SETTING(iPhone_Release, "WRAPPER_EXTENSION", "app"); iPhone_Release_Object->addProperty("name", "Release", "", SettingsNoValue); - iPhone_Release_Object->properties["buildSettings"] = iPhone_Release; + iPhone_Release_Object->_properties["buildSettings"] = iPhone_Release; _buildConfiguration.add(iPhone_Debug_Object); _buildConfiguration.add(iPhone_Release_Object); @@ -805,7 +805,7 @@ void XcodeProvider::setupBuildConfiguration() { ADD_SETTING(scummvm_Debug, "SDKROOT", "macosx"); scummvm_Debug_Object->addProperty("name", "Debug", "", SettingsNoValue); - scummvm_Debug_Object->properties["buildSettings"] = scummvm_Debug; + scummvm_Debug_Object->_properties["buildSettings"] = scummvm_Debug; // Release Object *scummvm_Release_Object = new Object(this, "XCBuildConfiguration_" PROJECT_NAME "_Release", PROJECT_NAME, "XCBuildConfiguration", "PBXProject", "Release"); @@ -816,7 +816,7 @@ void XcodeProvider::setupBuildConfiguration() { REMOVE_SETTING(scummvm_Release, "ONLY_ACTIVE_ARCH"); scummvm_Release_Object->addProperty("name", "Release", "", SettingsNoValue); - scummvm_Release_Object->properties["buildSettings"] = scummvm_Release; + scummvm_Release_Object->_properties["buildSettings"] = scummvm_Release; _buildConfiguration.add(scummvm_Debug_Object); _buildConfiguration.add(scummvm_Release_Object); @@ -880,7 +880,7 @@ void XcodeProvider::setupBuildConfiguration() { ADD_SETTING(scummvmOSX_Debug, "PRODUCT_NAME", PROJECT_DESCRIPTION); scummvmOSX_Debug_Object->addProperty("name", "Debug", "", SettingsNoValue); - scummvmOSX_Debug_Object->properties["buildSettings"] = scummvmOSX_Debug; + scummvmOSX_Debug_Object->_properties["buildSettings"] = scummvmOSX_Debug; // Release Object *scummvmOSX_Release_Object = new Object(this, "XCBuildConfiguration_" PROJECT_DESCRIPTION "-OSX_Release", _targets[OSX_TARGET] /* ScummVM-OS X */, "XCBuildConfiguration", "PBXNativeTarget", "Release"); @@ -891,7 +891,7 @@ void XcodeProvider::setupBuildConfiguration() { ADD_SETTING(scummvmOSX_Release, "WRAPPER_EXTENSION", "app"); scummvmOSX_Release_Object->addProperty("name", "Release", "", SettingsNoValue); - scummvmOSX_Release_Object->properties["buildSettings"] = scummvmOSX_Release; + scummvmOSX_Release_Object->_properties["buildSettings"] = scummvmOSX_Release; _buildConfiguration.add(scummvmOSX_Debug_Object); _buildConfiguration.add(scummvmOSX_Release_Object); @@ -910,7 +910,7 @@ void XcodeProvider::setupBuildConfiguration() { REMOVE_SETTING(scummvmSimulator_Debug, "TARGETED_DEVICE_FAMILY"); scummvmSimulator_Debug_Object->addProperty("name", "Debug", "", SettingsNoValue); - scummvmSimulator_Debug_Object->properties["buildSettings"] = scummvmSimulator_Debug; + scummvmSimulator_Debug_Object->_properties["buildSettings"] = scummvmSimulator_Debug; // Release Object *scummvmSimulator_Release_Object = new Object(this, "XCBuildConfiguration_" PROJECT_DESCRIPTION "-Simulator_Release", _targets[SIM_TARGET] /* ScummVM-Simulator */, "XCBuildConfiguration", "PBXNativeTarget", "Release"); @@ -921,28 +921,28 @@ void XcodeProvider::setupBuildConfiguration() { ADD_SETTING(scummvmSimulator_Release, "WRAPPER_EXTENSION", "app"); scummvmSimulator_Release_Object->addProperty("name", "Release", "", SettingsNoValue); - scummvmSimulator_Release_Object->properties["buildSettings"] = scummvmSimulator_Release; + scummvmSimulator_Release_Object->_properties["buildSettings"] = scummvmSimulator_Release; _buildConfiguration.add(scummvmSimulator_Debug_Object); _buildConfiguration.add(scummvmSimulator_Release_Object); ////////////////////////////////////////////////////////////////////////// // Configuration List - _configurationList.comment = "XCConfigurationList"; - _configurationList.flags = SettingsAsList; + _configurationList._comment = "XCConfigurationList"; + _configurationList._flags = SettingsAsList; #endif // Warning: This assumes we have all configurations with a Debug & Release pair - for (std::vector::iterator config = _buildConfiguration.objects.begin(); config != _buildConfiguration.objects.end(); config++) { + for (std::vector::iterator config = _buildConfiguration._objects.begin(); config != _buildConfiguration._objects.end(); config++) { - Object *configList = new Object(this, "XCConfigurationList_" + (*config)->name, (*config)->name, "XCConfigurationList", "", "Build configuration list for " + (*config)->refType + " \"" + (*config)->name + "\""); + Object *configList = new Object(this, "XCConfigurationList_" + (*config)->_name, (*config)->_name, "XCConfigurationList", "", "Build configuration list for " + (*config)->_refType + " \"" + (*config)->_name + "\""); Property buildConfigs; - buildConfigs.flags = SettingsAsList; + buildConfigs._flags = SettingsAsList; - buildConfigs.settings[getHash((*config)->id)] = Setting("", "Debug", SettingsNoValue, 0, 0); - buildConfigs.settings[getHash((*(++config))->id)] = Setting("", "Release", SettingsNoValue, 0, 1); + buildConfigs._settings[getHash((*config)->_id)] = Setting("", "Debug", SettingsNoValue, 0, 0); + buildConfigs._settings[getHash((*(++config))->_id)] = Setting("", "Release", SettingsNoValue, 0, 1); - configList->properties["buildConfigurations"] = buildConfigs; + configList->_properties["buildConfigurations"] = buildConfigs; configList->addProperty("defaultConfigurationIsVisible", "0", "", SettingsNoValue); configList->addProperty("defaultConfigurationName", "Release", "", SettingsNoValue); @@ -1034,28 +1034,28 @@ std::string XcodeProvider::writeProperty(const std::string &variable, Property & output += (flags & SettingsSingleItem ? "" : "\t\t\t") + variable + " = "; - if (prop.settings.size() > 1 || (prop.flags & SettingsSingleItem)) - output += (prop.flags & SettingsAsList) ? "(\n" : "{\n"; + if (prop._settings.size() > 1 || (prop._flags & SettingsSingleItem)) + output += (prop._flags & SettingsAsList) ? "(\n" : "{\n"; OrderedSettingList settings = prop.getOrderedSettingList(); for (OrderedSettingList::const_iterator setting = settings.begin(); setting != settings.end(); ++setting) { - if (settings.size() > 1 || (prop.flags & SettingsSingleItem)) + if (settings.size() > 1 || (prop._flags & SettingsSingleItem)) output += (flags & SettingsSingleItem ? " " : "\t\t\t\t"); output += writeSetting((*setting).first, (*setting).second); // The combination of SettingsAsList, and SettingsSingleItem should use "," and not ";" (i.e children // in PBXGroup, so we special case that case here. - if ((prop.flags & SettingsAsList) && (prop.settings.size() > 1 || (prop.flags & SettingsSingleItem))) { - output += (prop.settings.size() > 0) ? ",\n" : "\n"; + if ((prop._flags & SettingsAsList) && (prop._settings.size() > 1 || (prop._flags & SettingsSingleItem))) { + output += (prop._settings.size() > 0) ? ",\n" : "\n"; } else { output += ";"; output += (flags & SettingsSingleItem ? " " : "\n"); } } - if (prop.settings.size() > 1 || (prop.flags & SettingsSingleItem)) - output += (prop.flags & SettingsAsList) ? "\t\t\t);\n" : "\t\t\t};\n"; + if (prop._settings.size() > 1 || (prop._flags & SettingsSingleItem)) + output += (prop._flags & SettingsAsList) ? "\t\t\t);\n" : "\t\t\t};\n"; return output; } @@ -1068,32 +1068,32 @@ std::string XcodeProvider::writeSetting(const std::string &variable, std::string // XCode project generator pbuilder_pbx.cpp, writeSettings() (under LGPL 2.1) std::string XcodeProvider::writeSetting(const std::string &variable, const Setting &setting) const { std::string output; - const std::string quote = (setting.flags & SettingsNoQuote) ? "" : "\""; + const std::string quote = (setting._flags & SettingsNoQuote) ? "" : "\""; const std::string escape_quote = quote.empty() ? "" : "\\" + quote; std::string newline = "\n"; // Get indent level - for (int i = 0; i < setting.indent; ++i) + for (int i = 0; i < setting._indent; ++i) newline += "\t"; // Setup variable - std::string var = (setting.flags & SettingsQuoteVariable) ? "\"" + variable + "\"" : variable; + std::string var = (setting._flags & SettingsQuoteVariable) ? "\"" + variable + "\"" : variable; // Output a list - if (setting.flags & SettingsAsList) { + if (setting._flags & SettingsAsList) { - output += var + ((setting.flags & SettingsNoValue) ? "(" : " = (") + newline; + output += var + ((setting._flags & SettingsNoValue) ? "(" : " = (") + newline; - for (unsigned int i = 0, count = 0; i < setting.entries.size(); ++i) { + for (unsigned int i = 0, count = 0; i < setting._entries.size(); ++i) { - std::string value = setting.entries.at(i).value; + std::string value = setting._entries.at(i)._value; if (!value.empty()) { if (count++ > 0) output += "," + newline; output += quote + replace(value, quote, escape_quote) + quote; - std::string comment = setting.entries.at(i).comment; + std::string comment = setting._entries.at(i)._comment; if (!comment.empty()) output += " /* " + comment + " */"; } @@ -1101,24 +1101,24 @@ std::string XcodeProvider::writeSetting(const std::string &variable, const Setti } // Add closing ")" on new line newline.resize(newline.size() - 1); - output += (setting.flags & SettingsNoValue) ? "\t\t\t)" : "," + newline + ")"; + output += (setting._flags & SettingsNoValue) ? "\t\t\t)" : "," + newline + ")"; } else { output += var; - output += (setting.flags & SettingsNoValue) ? "" : " = " + quote; + output += (setting._flags & SettingsNoValue) ? "" : " = " + quote; - for(unsigned int i = 0; i < setting.entries.size(); ++i) { - std::string value = setting.entries.at(i).value; + for(unsigned int i = 0; i < setting._entries.size(); ++i) { + std::string value = setting._entries.at(i)._value; if(i) output += " "; output += value; - std::string comment = setting.entries.at(i).comment; + std::string comment = setting._entries.at(i)._comment; if (!comment.empty()) output += " /* " + comment + " */"; } - output += (setting.flags & SettingsNoValue) ? "" : quote; + output += (setting._flags & SettingsNoValue) ? "" : quote; } return output; } diff --git a/devtools/create_project/xcode.h b/devtools/create_project/xcode.h index 2686d14986..00ed9ff573 100644 --- a/devtools/create_project/xcode.h +++ b/devtools/create_project/xcode.h @@ -56,14 +56,14 @@ private: // File properties struct FileProperty { - std::string fileEncoding; - std::string lastKnownFileType; - std::string fileName; - std::string filePath; - std::string sourceTree; + std::string _fileEncoding; + std::string _lastKnownFileType; + std::string _fileName; + std::string _filePath; + std::string _sourceTree; FileProperty(std::string fileType = "", std::string name = "", std::string path = "", std::string source = "") : - fileEncoding(""), lastKnownFileType(fileType), fileName(name), filePath(path), sourceTree(source) + _fileEncoding(""), _lastKnownFileType(fileType), _fileName(name), _filePath(path), _sourceTree(source) { } }; @@ -73,33 +73,33 @@ private: typedef std::vector ValueList; struct Entry { - std::string value; - std::string comment; + std::string _value; + std::string _comment; - Entry(std::string val, std::string cmt) : value(val), comment(cmt) {} + Entry(std::string val, std::string cmt) : _value(val), _comment(cmt) {} }; typedef std::vector EntryList; struct Setting { - EntryList entries; - int flags; - int indent; - int order; + EntryList _entries; + int _flags; + int _indent; + int _order; - explicit Setting(std::string value = "", std::string comment = "", int flgs = 0, int idt = 0, int ord = -1) : flags(flgs), indent(idt), order(ord) { - entries.push_back(Entry(value, comment)); + explicit Setting(std::string value = "", std::string comment = "", int flgs = 0, int idt = 0, int ord = -1) : _flags(flgs), _indent(idt), _order(ord) { + _entries.push_back(Entry(value, comment)); } - explicit Setting(ValueList values, int flgs = 0, int idt = 0, int ord = -1) : flags(flgs), indent(idt), order(ord) { + explicit Setting(ValueList values, int flgs = 0, int idt = 0, int ord = -1) : _flags(flgs), _indent(idt), _order(ord) { for (unsigned int i = 0; i < values.size(); i++) - entries.push_back(Entry(values[i], "")); + _entries.push_back(Entry(values[i], "")); } - explicit Setting(EntryList ents, int flgs = 0, int idt = 0, int ord = -1) : entries(ents), flags(flgs), indent(idt), order(ord) {} + explicit Setting(EntryList ents, int flgs = 0, int idt = 0, int ord = -1) : _entries(ents), _flags(flgs), _indent(idt), _order(ord) {} void addEntry(std::string value, std::string comment = "") { - entries.push_back(Entry(value, comment)); + _entries.push_back(Entry(value, comment)); } }; @@ -108,45 +108,45 @@ private: typedef std::vector OrderedSettingList; static bool OrderSortPredicate(const SettingPair& s1, const SettingPair& s2) { - return s1.second.order < s2.second.order; + return s1.second._order < s2.second._order; } struct Property { public: - SettingList settings; - int flags; - bool hasOrder; + SettingList _settings; + int _flags; + bool _hasOrder; - Property() : flags(0), hasOrder(false) {} + Property() : _flags(0), _hasOrder(false) {} // Constructs a simple Property - explicit Property(std::string name, std::string value = "", std::string comment = "", int flgs = 0, int indent = 0, bool order = false) : flags(flgs), hasOrder(order) { - Setting setting(value, comment, flags, indent); + explicit Property(std::string name, std::string value = "", std::string comment = "", int flgs = 0, int indent = 0, bool order = false) : _flags(flgs), _hasOrder(order) { + Setting setting(value, comment, _flags, indent); - settings[name] = setting; + _settings[name] = setting; } - Property(std::string name, ValueList values, int flgs = 0, int indent = 0, bool order = false) : flags(flgs), hasOrder(order) { - Setting setting(values, flags, indent); + Property(std::string name, ValueList values, int flgs = 0, int indent = 0, bool order = false) : _flags(flgs), _hasOrder(order) { + Setting setting(values, _flags, indent); - settings[name] = setting; + _settings[name] = setting; } // Copy constructor Property(const Property &rhs) { - settings = rhs.settings; - flags = rhs.flags; + _settings = rhs._settings; + _flags = rhs._flags; } OrderedSettingList getOrderedSettingList() { OrderedSettingList list; // Prepare vector to sort - for (SettingList::const_iterator setting = settings.begin(); setting != settings.end(); ++setting) + for (SettingList::const_iterator setting = _settings.begin(); setting != _settings.end(); ++setting) list.push_back(SettingPair(setting->first, setting->second)); // Sort vector using setting order - if (hasOrder) + if (_hasOrder) std::sort(list.begin(), list.end(), OrderSortPredicate); return list; @@ -160,16 +160,16 @@ private: // be overkill since we only have to generate a single project struct Object { public: - std::string id; // Unique identifier for this object - std::string name; // Name (may not be unique - for ex. configuration entries) - std::string refType; // Type of object this references (if any) - std::string comment; // Main comment (empty for no comment) + std::string _id; // Unique identifier for this object + std::string _name; // Name (may not be unique - for ex. configuration entries) + std::string _refType; // Type of object this references (if any) + std::string _comment; // Main comment (empty for no comment) - PropertyList properties; // List of object properties, including output configuration + PropertyList _properties; // List of object properties, including output configuration // Constructs an object and add a default type property Object(XcodeProvider *objectParent, std::string objectId, std::string objectName, std::string objectType, std::string objectRefType = "", std::string objectComment = "") - : id(objectId), name(objectName), refType(objectRefType), comment(objectComment), parent(objectParent) { + : _id(objectId), _name(objectName), _refType(objectRefType), _comment(objectComment), _parent(objectParent) { assert(objectParent); assert(!objectId.empty()); assert(!objectName.empty()); @@ -180,25 +180,25 @@ private: // Add a simple Property with just a name and a value void addProperty(std::string propName, std::string propValue, std::string propComment = "", int propFlags = 0, int propIndent = 0) { - properties[propName] = Property(propValue, "", propComment, propFlags, propIndent); + _properties[propName] = Property(propValue, "", propComment, propFlags, propIndent); } std::string toString(int flags = 0) { std::string output; - output = "\t\t" + parent->getHash(id) + (comment.empty() ? "" : " /* " + comment + " */") + " = {"; + output = "\t\t" + _parent->getHash(_id) + (_comment.empty() ? "" : " /* " + _comment + " */") + " = {"; if (flags & SettingsAsList) output += "\n"; // Special case: always output the isa property first - output += parent->writeProperty("isa", properties["isa"], flags); + output += _parent->writeProperty("isa", _properties["isa"], flags); // Write each property - for (PropertyList::iterator property = properties.begin(); property != properties.end(); ++property) { + for (PropertyList::iterator property = _properties.begin(); property != _properties.end(); ++property) { if ((*property).first == "isa") continue; - output += parent->writeProperty((*property).first, (*property).second, flags); + output += _parent->writeProperty((*property).first, (*property).second, flags); } if (flags & SettingsAsList) @@ -211,14 +211,14 @@ private: // Slight hack, to allow Group access to parent. protected: - XcodeProvider *parent; + XcodeProvider *_parent; private: // Returns the type property (should always be the first in the properties map) std::string getType() { - assert(!properties.empty()); - assert(!properties["isa"].settings.empty()); + assert(!_properties.empty()); + assert(!_properties["isa"]._settings.empty()); - SettingList::iterator it = properties["isa"].settings.begin(); + SettingList::iterator it = _properties["isa"]._settings.begin(); return (*it).first; } @@ -226,33 +226,33 @@ private: struct ObjectList { private: - std::map objectMap; + std::map _objectMap; public: - std::vector objects; - std::string comment; - int flags; + std::vector _objects; + std::string _comment; + int _flags; void add(Object *obj) { - std::map::iterator it = objectMap.find(obj->id); - if (it != objectMap.end() && it->second == true) + std::map::iterator it = _objectMap.find(obj->_id); + if (it != _objectMap.end() && it->second == true) return; - objects.push_back(obj); - objectMap[obj->id] = true; + _objects.push_back(obj); + _objectMap[obj->_id] = true; } std::string toString() { std::string output; - if (!comment.empty()) - output = "\n/* Begin " + comment + " section */\n"; + if (!_comment.empty()) + output = "\n/* Begin " + _comment + " section */\n"; - for (std::vector::iterator object = objects.begin(); object != objects.end(); ++object) - output += (*object)->toString(flags); + for (std::vector::iterator object = _objects.begin(); object != _objects.end(); ++object) + output += (*object)->toString(_flags); - if (!comment.empty()) - output += "/* End " + comment + " section */\n"; + if (!_comment.empty()) + output += "/* End " + _comment + " section */\n"; return output; } @@ -274,7 +274,7 @@ private: void addChildGroup(const Group* group); void ensureChildExists(const std::string &name); Group *getChildGroup(const std::string &name); - std::string getHashRef() const { return parent->getHash(id); } + std::string getHashRef() const { return _parent->getHash(_id); } }; // The path used by the root-source group -- cgit v1.2.3 From 50807b3b0131664db7c073bc7fd14bf828e08e5e Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Sat, 12 Dec 2015 06:06:42 +0100 Subject: DEVTOOLS: Run astyle over xcode.[cpp/h]. Manual fix up included. --- devtools/create_project/xcode.cpp | 74 +++++++++++++++++++-------------------- devtools/create_project/xcode.h | 23 ++++++------ 2 files changed, 48 insertions(+), 49 deletions(-) diff --git a/devtools/create_project/xcode.cpp b/devtools/create_project/xcode.cpp index 657adbc80f..27cf88e837 100644 --- a/devtools/create_project/xcode.cpp +++ b/devtools/create_project/xcode.cpp @@ -93,18 +93,18 @@ bool producesObjectFileOnOSX(const std::string &fileName) { } XcodeProvider::Group::Group(XcodeProvider *objectParent, const std::string &groupName, const std::string &uniqueName, const std::string &path) : Object(objectParent, uniqueName, groupName, "PBXGroup", "", groupName) { - addProperty("name", _name, "", SettingsNoValue|SettingsQuoteVariable); - addProperty("sourceTree", "", "", SettingsNoValue|SettingsQuoteVariable); - + addProperty("name", _name, "", SettingsNoValue | SettingsQuoteVariable); + addProperty("sourceTree", "", "", SettingsNoValue | SettingsQuoteVariable); + if (path != "") { - addProperty("path", path, "", SettingsNoValue|SettingsQuoteVariable); + addProperty("path", path, "", SettingsNoValue | SettingsQuoteVariable); } _childOrder = 0; _treeName = uniqueName; } void XcodeProvider::Group::ensureChildExists(const std::string &name) { - std::map::iterator it = _childGroups.find(name); + std::map::iterator it = _childGroups.find(name); if (it == _childGroups.end()) { Group *child = new Group(_parent, name, this->_treeName + '/' + name, name); _childGroups[name] = child; @@ -131,7 +131,7 @@ void XcodeProvider::Group::addChildInternal(const std::string &id, const std::st } -void XcodeProvider::Group::addChildGroup(const Group* group) { +void XcodeProvider::Group::addChildGroup(const Group *group) { addChildInternal(_parent->getHash(group->_treeName), group->_treeName); } @@ -151,14 +151,14 @@ void XcodeProvider::Group::addChildByHash(const std::string &hash, const std::st } XcodeProvider::Group *XcodeProvider::Group::getChildGroup(const std::string &name) { - std::map::iterator it = _childGroups.find(name); + std::map::iterator it = _childGroups.find(name); assert(it != _childGroups.end()); return it->second; } XcodeProvider::Group *XcodeProvider::touchGroupsForPath(const std::string &path) { if (_rootSourceGroup == NULL) { - assert (path == _projectRoot); + assert(path == _projectRoot); _rootSourceGroup = new Group(this, "Sources", path, path); _groups.add(_rootSourceGroup); return _rootSourceGroup; @@ -181,9 +181,9 @@ XcodeProvider::Group *XcodeProvider::touchGroupsForPath(const std::string &path) void XcodeProvider::addFileReference(const std::string &id, const std::string &name, FileProperty properties) { Object *fileRef = new Object(this, id, name, "PBXFileReference", "PBXFileReference", name); if (!properties._fileEncoding.empty()) fileRef->addProperty("fileEncoding", properties._fileEncoding, "", SettingsNoValue); - if (!properties._lastKnownFileType.empty()) fileRef->addProperty("lastKnownFileType", properties._lastKnownFileType, "", SettingsNoValue|SettingsQuoteVariable); - if (!properties._fileName.empty()) fileRef->addProperty("name", properties._fileName, "", SettingsNoValue|SettingsQuoteVariable); - if (!properties._filePath.empty()) fileRef->addProperty("path", properties._filePath, "", SettingsNoValue|SettingsQuoteVariable); + if (!properties._lastKnownFileType.empty()) fileRef->addProperty("lastKnownFileType", properties._lastKnownFileType, "", SettingsNoValue | SettingsQuoteVariable); + if (!properties._fileName.empty()) fileRef->addProperty("name", properties._fileName, "", SettingsNoValue | SettingsQuoteVariable); + if (!properties._filePath.empty()) fileRef->addProperty("path", properties._filePath, "", SettingsNoValue | SettingsQuoteVariable); if (!properties._sourceTree.empty()) fileRef->addProperty("sourceTree", properties._sourceTree, "", SettingsNoValue); _fileReference.add(fileRef); _fileReference._flags = SettingsSingleItem; @@ -191,9 +191,9 @@ void XcodeProvider::addFileReference(const std::string &id, const std::string &n void XcodeProvider::addProductFileReference(const std::string &id, const std::string &name) { Object *fileRef = new Object(this, id, name, "PBXFileReference", "PBXFileReference", name); - fileRef->addProperty("explicitFileType", "compiled.mach-o.executable", "", SettingsNoValue|SettingsQuoteVariable); + fileRef->addProperty("explicitFileType", "compiled.mach-o.executable", "", SettingsNoValue | SettingsQuoteVariable); fileRef->addProperty("includeInIndex", "0", "", SettingsNoValue); - fileRef->addProperty("path", name, "", SettingsNoValue|SettingsQuoteVariable); + fileRef->addProperty("path", name, "", SettingsNoValue | SettingsQuoteVariable); fileRef->addProperty("sourceTree", "BUILT_PRODUCTS_DIR", "", SettingsNoValue); _fileReference.add(fileRef); _fileReference._flags = SettingsSingleItem; @@ -218,7 +218,7 @@ void XcodeProvider::createWorkspace(const BuildSetup &setup) { createDirectory(workspace); _projectRoot = setup.srcDir; touchGroupsForPath(_projectRoot); - + // Setup global objects setupDefines(setup); #ifdef ENABLE_IOS @@ -333,7 +333,7 @@ void XcodeProvider::setupCopyFilesBuildPhase() { #define DEF_SYSFRAMEWORK(framework) properties[framework".framework"] = FileProperty("wrapper.framework", framework".framework", "System/Library/Frameworks/" framework ".framework", "SDKROOT"); \ ADD_SETTING_ORDER_NOVALUE(children, getHash(framework".framework"), framework".framework", fwOrder++); - + #define DEF_LOCALLIB_STATIC(lib) properties[lib".a"] = FileProperty("archive.ar", lib".a", "/opt/local/lib/" lib ".a", "\"\""); \ ADD_SETTING_ORDER_NOVALUE(children, getHash(lib".a"), lib".a", fwOrder++); @@ -530,16 +530,16 @@ void XcodeProvider::setupNativeTarget() { buildPhases._settings[getHash("PBXFrameworksBuildPhase_" + _targets[i])] = Setting("", "Frameworks", SettingsNoValue, 0, 2); target->_properties["buildPhases"] = buildPhases; - target->addProperty("buildRules", "", "", SettingsNoValue|SettingsAsList); + target->addProperty("buildRules", "", "", SettingsNoValue | SettingsAsList); - target->addProperty("dependencies", "", "", SettingsNoValue|SettingsAsList); + target->addProperty("dependencies", "", "", SettingsNoValue | SettingsAsList); - target->addProperty("name", _targets[i], "", SettingsNoValue|SettingsQuoteVariable); + target->addProperty("name", _targets[i], "", SettingsNoValue | SettingsQuoteVariable); target->addProperty("productName", PROJECT_NAME, "", SettingsNoValue); addProductFileReference("PBXFileReference_" PROJECT_DESCRIPTION ".app_" + _targets[i], PROJECT_DESCRIPTION ".app"); productsGroup->addChildByHash(getHash("PBXFileReference_" PROJECT_DESCRIPTION ".app_" + _targets[i]), PROJECT_DESCRIPTION ".app"); target->addProperty("productReference", getHash("PBXFileReference_" PROJECT_DESCRIPTION ".app_" + _targets[i]), PROJECT_DESCRIPTION ".app", SettingsNoValue); - target->addProperty("productType", "com.apple.product-type.application", "", SettingsNoValue|SettingsQuoteVariable); + target->addProperty("productType", "com.apple.product-type.application", "", SettingsNoValue | SettingsQuoteVariable); _nativeTarget.add(target); } @@ -553,7 +553,7 @@ void XcodeProvider::setupProject() { Object *project = new Object(this, "PBXProject", "PBXProject", "PBXProject", "", "Project object"); project->addProperty("buildConfigurationList", getHash("XCConfigurationList_scummvm"), "Build configuration list for PBXProject \"" PROJECT_NAME "\"", SettingsNoValue); - project->addProperty("compatibilityVersion", "Xcode 3.2", "", SettingsNoValue|SettingsQuoteVariable); + project->addProperty("compatibilityVersion", "Xcode 3.2", "", SettingsNoValue | SettingsQuoteVariable); project->addProperty("developmentRegion", "English", "", SettingsNoValue); project->addProperty("hasScannedForEncodings", "1", "", SettingsNoValue); @@ -567,8 +567,8 @@ void XcodeProvider::setupProject() { project->_properties["knownRegions"] = regions; project->addProperty("mainGroup", _rootSourceGroup->getHashRef(), "CustomTemplate", SettingsNoValue); - project->addProperty("projectDirPath", _projectRoot, "", SettingsNoValue|SettingsQuoteVariable); - project->addProperty("projectRoot", "", "", SettingsNoValue|SettingsQuoteVariable); + project->addProperty("projectDirPath", _projectRoot, "", SettingsNoValue | SettingsQuoteVariable); + project->addProperty("projectRoot", "", "", SettingsNoValue | SettingsQuoteVariable); // List of targets Property targets; @@ -683,7 +683,7 @@ void XcodeProvider::setupSourcesBuildPhase() { files._flags = SettingsAsList; int order = 0; - for (std::vector::iterator file = _buildFile._objects.begin(); file !=_buildFile._objects.end(); ++file) { + for (std::vector::iterator file = _buildFile._objects.begin(); file != _buildFile._objects.end(); ++file) { if (!producesObjectFileOnOSX((*file)->_name)) { continue; } @@ -734,7 +734,7 @@ void XcodeProvider::setupBuildConfiguration() { iPhone_HeaderSearchPaths.push_back("$(SRCROOT)/engines/"); iPhone_HeaderSearchPaths.push_back("$(SRCROOT)"); iPhone_HeaderSearchPaths.push_back("include/"); - ADD_SETTING_LIST(iPhone_Debug, "HEADER_SEARCH_PATHS", iPhone_HeaderSearchPaths, SettingsAsList|SettingsQuoteVariable, 5); + ADD_SETTING_LIST(iPhone_Debug, "HEADER_SEARCH_PATHS", iPhone_HeaderSearchPaths, SettingsAsList | SettingsQuoteVariable, 5); ADD_SETTING(iPhone_Debug, "INFOPLIST_FILE", "Info.plist"); ValueList iPhone_LibPaths; iPhone_LibPaths.push_back("$(inherited)"); @@ -787,7 +787,7 @@ void XcodeProvider::setupBuildConfiguration() { ADD_DEFINE(scummvm_defines, "IPHONE"); ADD_DEFINE(scummvm_defines, "XCODE"); ADD_DEFINE(scummvm_defines, "IPHONE_OFFICIAL"); - ADD_SETTING_LIST(scummvm_Debug, "GCC_PREPROCESSOR_DEFINITIONS", scummvm_defines, SettingsNoQuote|SettingsAsList, 5); + ADD_SETTING_LIST(scummvm_Debug, "GCC_PREPROCESSOR_DEFINITIONS", scummvm_defines, SettingsNoQuote | SettingsAsList, 5); ADD_SETTING(scummvm_Debug, "GCC_THUMB_SUPPORT", "NO"); ADD_SETTING(scummvm_Debug, "GCC_USE_GCC3_PFE_SUPPORT", "NO"); ADD_SETTING(scummvm_Debug, "GCC_WARN_ABOUT_RETURN_TYPE", "YES"); @@ -796,7 +796,7 @@ void XcodeProvider::setupBuildConfiguration() { scummvm_HeaderPaths.push_back("include/"); scummvm_HeaderPaths.push_back("$(SRCROOT)/engines/"); scummvm_HeaderPaths.push_back("$(SRCROOT)"); - ADD_SETTING_LIST(scummvm_Debug, "HEADER_SEARCH_PATHS", scummvm_HeaderPaths, SettingsQuoteVariable|SettingsAsList, 5); + ADD_SETTING_LIST(scummvm_Debug, "HEADER_SEARCH_PATHS", scummvm_HeaderPaths, SettingsQuoteVariable | SettingsAsList, 5); ADD_SETTING_QUOTE(scummvm_Debug, "LIBRARY_SEARCH_PATHS", ""); ADD_SETTING(scummvm_Debug, "ONLY_ACTIVE_ARCH", "YES"); ADD_SETTING_QUOTE(scummvm_Debug, "OTHER_CFLAGS", ""); @@ -844,7 +844,7 @@ void XcodeProvider::setupBuildConfiguration() { ValueList scummvmOSX_defines(_defines); ADD_DEFINE(scummvmOSX_defines, "SDL_BACKEND"); ADD_DEFINE(scummvmOSX_defines, "MACOSX"); - ADD_SETTING_LIST(scummvmOSX_Debug, "GCC_PREPROCESSOR_DEFINITIONS", scummvmOSX_defines, SettingsNoQuote|SettingsAsList, 5); + ADD_SETTING_LIST(scummvmOSX_Debug, "GCC_PREPROCESSOR_DEFINITIONS", scummvmOSX_defines, SettingsNoQuote | SettingsAsList, 5); ADD_SETTING_QUOTE(scummvmOSX_Debug, "GCC_VERSION", ""); ValueList scummvmOSX_HeaderPaths; scummvmOSX_HeaderPaths.push_back("/opt/local/include/SDL"); @@ -853,14 +853,14 @@ void XcodeProvider::setupBuildConfiguration() { scummvmOSX_HeaderPaths.push_back("include/"); scummvmOSX_HeaderPaths.push_back("$(SRCROOT)/engines/"); scummvmOSX_HeaderPaths.push_back("$(SRCROOT)"); - ADD_SETTING_LIST(scummvmOSX_Debug, "HEADER_SEARCH_PATHS", scummvmOSX_HeaderPaths, SettingsQuoteVariable|SettingsAsList, 5); + ADD_SETTING_LIST(scummvmOSX_Debug, "HEADER_SEARCH_PATHS", scummvmOSX_HeaderPaths, SettingsQuoteVariable | SettingsAsList, 5); ADD_SETTING_QUOTE(scummvmOSX_Debug, "INFOPLIST_FILE", "$(SRCROOT)/dists/macosx/Info.plist"); ValueList scummvmOSX_LibPaths; scummvmOSX_LibPaths.push_back("/sw/lib"); scummvmOSX_LibPaths.push_back("/opt/local/lib"); scummvmOSX_LibPaths.push_back("\"$(inherited)\""); scummvmOSX_LibPaths.push_back("\"\\\\\\\"$(SRCROOT)/lib\\\\\\\"\""); // mmmh, all those slashes, it's almost Christmas \o/ - ADD_SETTING_LIST(scummvmOSX_Debug, "LIBRARY_SEARCH_PATHS", scummvmOSX_LibPaths, SettingsNoQuote|SettingsAsList, 5); + ADD_SETTING_LIST(scummvmOSX_Debug, "LIBRARY_SEARCH_PATHS", scummvmOSX_LibPaths, SettingsNoQuote | SettingsAsList, 5); ADD_SETTING_QUOTE(scummvmOSX_Debug, "OTHER_CFLAGS", ""); ValueList scummvmOSX_LdFlags; scummvmOSX_LdFlags.push_back("-lSDLmain"); @@ -904,7 +904,7 @@ void XcodeProvider::setupBuildConfiguration() { Object *scummvmSimulator_Debug_Object = new Object(this, "XCBuildConfiguration_" PROJECT_DESCRIPTION "-Simulator_Debug", _targets[SIM_TARGET] /* ScummVM-Simulator */, "XCBuildConfiguration", "PBXNativeTarget", "Debug"); Property scummvmSimulator_Debug(iPhone_Debug); ADD_SETTING_QUOTE(scummvmSimulator_Debug, "FRAMEWORK_SEARCH_PATHS", "$(inherited)"); - ADD_SETTING_LIST(scummvmSimulator_Debug, "GCC_PREPROCESSOR_DEFINITIONS", scummvm_defines, SettingsNoQuote|SettingsAsList, 5); + ADD_SETTING_LIST(scummvmSimulator_Debug, "GCC_PREPROCESSOR_DEFINITIONS", scummvm_defines, SettingsNoQuote | SettingsAsList, 5); ADD_SETTING(scummvmSimulator_Debug, "SDKROOT", "iphonesimulator3.2"); ADD_SETTING_QUOTE(scummvmSimulator_Debug, "VALID_ARCHS", "i386 x86_64"); REMOVE_SETTING(scummvmSimulator_Debug, "TARGETED_DEVICE_FAMILY"); @@ -934,7 +934,7 @@ void XcodeProvider::setupBuildConfiguration() { // Warning: This assumes we have all configurations with a Debug & Release pair for (std::vector::iterator config = _buildConfiguration._objects.begin(); config != _buildConfiguration._objects.end(); config++) { - Object *configList = new Object(this, "XCConfigurationList_" + (*config)->_name, (*config)->_name, "XCConfigurationList", "", "Build configuration list for " + (*config)->_refType + " \"" + (*config)->_name + "\""); + Object *configList = new Object(this, "XCConfigurationList_" + (*config)->_name, (*config)->_name, "XCConfigurationList", "", "Build configuration list for " + (*config)->_refType + " \"" + (*config)->_name + "\""); Property buildConfigs; buildConfigs._flags = SettingsAsList; @@ -959,7 +959,7 @@ void XcodeProvider::setupBuildConfiguration() { void XcodeProvider::setupDefines(const BuildSetup &setup) { for (StringList::const_iterator i = setup.defines.begin(); i != setup.defines.end(); ++i) { - if (*i == "HAVE_NASM") // Not supported on Mac (TODO: change how it's handled in main class or add it only in MSVC/CodeBlocks providers?) + if (*i == "HAVE_NASM") // Not supported on Mac (TODO: change how it's handled in main class or add it only in MSVC/CodeBlocks providers?) continue; ADD_DEFINE(_defines, *i); @@ -995,7 +995,7 @@ std::string XcodeProvider::getHash(std::string key) { #endif } -bool isSeparator (char s) { return (s == '-'); } +bool isSeparator(char s) { return (s == '-'); } std::string XcodeProvider::newHash() const { std::string hash = createUUID(); @@ -1018,10 +1018,10 @@ std::string replace(std::string input, const std::string find, std::string repla std::string::size_type findLen = find.length(); std::string::size_type replaceLen = replaceStr.length(); - if (findLen == 0 ) + if (findLen == 0) return input; - for (;(pos = input.find(find, pos)) != std::string::npos;) { + for (; (pos = input.find(find, pos)) != std::string::npos;) { input.replace(pos, findLen, replaceStr); pos += replaceLen; } @@ -1107,9 +1107,9 @@ std::string XcodeProvider::writeSetting(const std::string &variable, const Setti output += (setting._flags & SettingsNoValue) ? "" : " = " + quote; - for(unsigned int i = 0; i < setting._entries.size(); ++i) { + for (unsigned int i = 0; i < setting._entries.size(); ++i) { std::string value = setting._entries.at(i)._value; - if(i) + if (i) output += " "; output += value; diff --git a/devtools/create_project/xcode.h b/devtools/create_project/xcode.h index 00ed9ff573..7a1e540df1 100644 --- a/devtools/create_project/xcode.h +++ b/devtools/create_project/xcode.h @@ -62,9 +62,8 @@ private: std::string _filePath; std::string _sourceTree; - FileProperty(std::string fileType = "", std::string name = "", std::string path = "", std::string source = "") : - _fileEncoding(""), _lastKnownFileType(fileType), _fileName(name), _filePath(path), _sourceTree(source) - { + FileProperty(std::string fileType = "", std::string name = "", std::string path = "", std::string source = "") + : _fileEncoding(""), _lastKnownFileType(fileType), _fileName(name), _filePath(path), _sourceTree(source) { } }; @@ -107,7 +106,7 @@ private: typedef std::pair SettingPair; typedef std::vector OrderedSettingList; - static bool OrderSortPredicate(const SettingPair& s1, const SettingPair& s2) { + static bool OrderSortPredicate(const SettingPair &s1, const SettingPair &s2) { return s1.second._order < s2.second._order; } @@ -160,12 +159,12 @@ private: // be overkill since we only have to generate a single project struct Object { public: - std::string _id; // Unique identifier for this object - std::string _name; // Name (may not be unique - for ex. configuration entries) - std::string _refType; // Type of object this references (if any) - std::string _comment; // Main comment (empty for no comment) + std::string _id; // Unique identifier for this object + std::string _name; // Name (may not be unique - for ex. configuration entries) + std::string _refType; // Type of object this references (if any) + std::string _comment; // Main comment (empty for no comment) - PropertyList _properties; // List of object properties, including output configuration + PropertyList _properties; // List of object properties, including output configuration // Constructs an object and add a default type property Object(XcodeProvider *objectParent, std::string objectId, std::string objectName, std::string objectType, std::string objectRefType = "", std::string objectComment = "") @@ -175,7 +174,7 @@ private: assert(!objectName.empty()); assert(!objectType.empty()); - addProperty("isa", objectType, "", SettingsNoQuote|SettingsNoValue); + addProperty("isa", objectType, "", SettingsNoQuote | SettingsNoValue); } // Add a simple Property with just a name and a value @@ -209,7 +208,7 @@ private: return output; } - // Slight hack, to allow Group access to parent. + // Slight hack, to allow Group access to parent. protected: XcodeProvider *_parent; private: @@ -271,7 +270,7 @@ private: void addChildFile(const std::string &name); void addChildByHash(const std::string &hash, const std::string &name); // Should be passed the hash for the entry - void addChildGroup(const Group* group); + void addChildGroup(const Group *group); void ensureChildExists(const std::string &name); Group *getChildGroup(const std::string &name); std::string getHashRef() const { return _parent->getHash(_id); } -- cgit v1.2.3 From 3ad5ad57e2fdac80cd4c79da958cd5122b941c60 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Sat, 12 Dec 2015 06:09:12 +0100 Subject: DEVTOOLS: Use default copy constructor. The formerly user supplied copy constructor was not identical to the default generated, but the output of create_project for xcode is unchanged. --- devtools/create_project/xcode.h | 6 ------ 1 file changed, 6 deletions(-) diff --git a/devtools/create_project/xcode.h b/devtools/create_project/xcode.h index 7a1e540df1..3f037ebfc4 100644 --- a/devtools/create_project/xcode.h +++ b/devtools/create_project/xcode.h @@ -131,12 +131,6 @@ private: _settings[name] = setting; } - // Copy constructor - Property(const Property &rhs) { - _settings = rhs._settings; - _flags = rhs._flags; - } - OrderedSettingList getOrderedSettingList() { OrderedSettingList list; -- cgit v1.2.3 From c9d7299e6586fa7baa5badffc6f0c07d6d91c679 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Sat, 12 Dec 2015 06:13:48 +0100 Subject: DEVTOOLS: Cleanup code. --- devtools/create_project/xcode.cpp | 2 +- devtools/create_project/xcode.h | 15 +++++---------- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/devtools/create_project/xcode.cpp b/devtools/create_project/xcode.cpp index 27cf88e837..534b67f409 100644 --- a/devtools/create_project/xcode.cpp +++ b/devtools/create_project/xcode.cpp @@ -1042,7 +1042,7 @@ std::string XcodeProvider::writeProperty(const std::string &variable, Property & if (settings.size() > 1 || (prop._flags & SettingsSingleItem)) output += (flags & SettingsSingleItem ? " " : "\t\t\t\t"); - output += writeSetting((*setting).first, (*setting).second); + output += writeSetting(setting->first, setting->second); // The combination of SettingsAsList, and SettingsSingleItem should use "," and not ";" (i.e children // in PBXGroup, so we special case that case here. diff --git a/devtools/create_project/xcode.h b/devtools/create_project/xcode.h index 3f037ebfc4..e6295ccf7b 100644 --- a/devtools/create_project/xcode.h +++ b/devtools/create_project/xcode.h @@ -120,15 +120,11 @@ private: // Constructs a simple Property explicit Property(std::string name, std::string value = "", std::string comment = "", int flgs = 0, int indent = 0, bool order = false) : _flags(flgs), _hasOrder(order) { - Setting setting(value, comment, _flags, indent); - - _settings[name] = setting; + _settings[name] = Setting(value, comment, _flags, indent); } Property(std::string name, ValueList values, int flgs = 0, int indent = 0, bool order = false) : _flags(flgs), _hasOrder(order) { - Setting setting(values, _flags, indent); - - _settings[name] = setting; + _settings[name] = Setting(values, _flags, indent); } OrderedSettingList getOrderedSettingList() { @@ -188,10 +184,10 @@ private: // Write each property for (PropertyList::iterator property = _properties.begin(); property != _properties.end(); ++property) { - if ((*property).first == "isa") + if (property->first == "isa") continue; - output += _parent->writeProperty((*property).first, (*property).second, flags); + output += _parent->writeProperty(property->first, property->second, flags); } if (flags & SettingsAsList) @@ -212,8 +208,7 @@ private: assert(!_properties["isa"]._settings.empty()); SettingList::iterator it = _properties["isa"]._settings.begin(); - - return (*it).first; + return it->first; } }; -- cgit v1.2.3 From d09c3e28a641dee96df51a6297e11932cc118253 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Sat, 12 Dec 2015 06:25:38 +0100 Subject: DEVTOOLS: Remove 'explicit' keyword from multi parameter constructors. This does not make sense in C++98. For C++11 this only prevents Foo x = {...} initialization, which we can't use anyway. --- devtools/create_project/xcode.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/devtools/create_project/xcode.h b/devtools/create_project/xcode.h index e6295ccf7b..cadd1898a7 100644 --- a/devtools/create_project/xcode.h +++ b/devtools/create_project/xcode.h @@ -86,16 +86,16 @@ private: int _indent; int _order; - explicit Setting(std::string value = "", std::string comment = "", int flgs = 0, int idt = 0, int ord = -1) : _flags(flgs), _indent(idt), _order(ord) { + Setting(std::string value = "", std::string comment = "", int flgs = 0, int idt = 0, int ord = -1) : _flags(flgs), _indent(idt), _order(ord) { _entries.push_back(Entry(value, comment)); } - explicit Setting(ValueList values, int flgs = 0, int idt = 0, int ord = -1) : _flags(flgs), _indent(idt), _order(ord) { + Setting(ValueList values, int flgs = 0, int idt = 0, int ord = -1) : _flags(flgs), _indent(idt), _order(ord) { for (unsigned int i = 0; i < values.size(); i++) _entries.push_back(Entry(values[i], "")); } - explicit Setting(EntryList ents, int flgs = 0, int idt = 0, int ord = -1) : _entries(ents), _flags(flgs), _indent(idt), _order(ord) {} + Setting(EntryList ents, int flgs = 0, int idt = 0, int ord = -1) : _entries(ents), _flags(flgs), _indent(idt), _order(ord) {} void addEntry(std::string value, std::string comment = "") { _entries.push_back(Entry(value, comment)); @@ -119,7 +119,7 @@ private: Property() : _flags(0), _hasOrder(false) {} // Constructs a simple Property - explicit Property(std::string name, std::string value = "", std::string comment = "", int flgs = 0, int indent = 0, bool order = false) : _flags(flgs), _hasOrder(order) { + Property(std::string name, std::string value = "", std::string comment = "", int flgs = 0, int indent = 0, bool order = false) : _flags(flgs), _hasOrder(order) { _settings[name] = Setting(value, comment, _flags, indent); } -- cgit v1.2.3 From 70a4047a78181a055787baf5b4f6a54e7aa67201 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Sat, 12 Dec 2015 06:31:46 +0100 Subject: DEVTOOLS: Adjust enum constant names to match our conventions. --- devtools/create_project/xcode.cpp | 236 +++++++++++++++++++------------------- devtools/create_project/xcode.h | 16 +-- 2 files changed, 126 insertions(+), 126 deletions(-) diff --git a/devtools/create_project/xcode.cpp b/devtools/create_project/xcode.cpp index 534b67f409..ed3ba0f8cc 100644 --- a/devtools/create_project/xcode.cpp +++ b/devtools/create_project/xcode.cpp @@ -42,19 +42,19 @@ namespace CreateProjectTool { defines.push_back(name); #define ADD_SETTING(config, key, value) \ - config._settings[key] = Setting(value, "", SettingsNoQuote); + config._settings[key] = Setting(value, "", kSettingsNoQuote); #define ADD_SETTING_ORDER(config, key, value, order) \ - config._settings[key] = Setting(value, "", SettingsNoQuote, 0, order); + config._settings[key] = Setting(value, "", kSettingsNoQuote, 0, order); #define ADD_SETTING_ORDER_NOVALUE(config, key, comment, order) \ - config._settings[key] = Setting("", comment, SettingsNoValue, 0, order); + config._settings[key] = Setting("", comment, kSettingsNoValue, 0, order); #define ADD_SETTING_QUOTE(config, key, value) \ config._settings[key] = Setting(value); #define ADD_SETTING_QUOTE_VAR(config, key, value) \ - config._settings[key] = Setting(value, "", SettingsQuoteVariable); + config._settings[key] = Setting(value, "", kSettingsQuoteVariable); #define ADD_SETTING_LIST(config, key, values, flags, indent) \ config._settings[key] = Setting(values, flags, indent); @@ -64,20 +64,20 @@ namespace CreateProjectTool { #define ADD_BUILD_FILE(id, name, fileRefId, comment) { \ Object *buildFile = new Object(this, id, name, "PBXBuildFile", "PBXBuildFile", comment); \ - buildFile->addProperty("fileRef", fileRefId, name, SettingsNoValue); \ + buildFile->addProperty("fileRef", fileRefId, name, kSettingsNoValue); \ _buildFile.add(buildFile); \ - _buildFile._flags = SettingsSingleItem; \ + _buildFile._flags = kSettingsSingleItem; \ } #define ADD_FILE_REFERENCE(id, name, properties) { \ Object *fileRef = new Object(this, id, name, "PBXFileReference", "PBXFileReference", name); \ - if (!properties._fileEncoding.empty()) fileRef->addProperty("fileEncoding", properties._fileEncoding, "", SettingsNoValue); \ - if (!properties._lastKnownFileType.empty()) fileRef->addProperty("lastKnownFileType", properties._lastKnownFileType, "", SettingsNoValue|SettingsQuoteVariable); \ - if (!properties._fileName.empty()) fileRef->addProperty("name", properties._fileName, "", SettingsNoValue|SettingsQuoteVariable); \ - if (!properties._filePath.empty()) fileRef->addProperty("path", properties._filePath, "", SettingsNoValue|SettingsQuoteVariable); \ - if (!properties._sourceTree.empty()) fileRef->addProperty("sourceTree", properties._sourceTree, "", SettingsNoValue); \ + if (!properties._fileEncoding.empty()) fileRef->addProperty("fileEncoding", properties._fileEncoding, "", kSettingsNoValue); \ + if (!properties._lastKnownFileType.empty()) fileRef->addProperty("lastKnownFileType", properties._lastKnownFileType, "", kSettingsNoValue|kSettingsQuoteVariable); \ + if (!properties._fileName.empty()) fileRef->addProperty("name", properties._fileName, "", kSettingsNoValue|kSettingsQuoteVariable); \ + if (!properties._filePath.empty()) fileRef->addProperty("path", properties._filePath, "", kSettingsNoValue|kSettingsQuoteVariable); \ + if (!properties._sourceTree.empty()) fileRef->addProperty("sourceTree", properties._sourceTree, "", kSettingsNoValue); \ _fileReference.add(fileRef); \ - _fileReference._flags = SettingsSingleItem; \ + _fileReference._flags = kSettingsSingleItem; \ } bool producesObjectFileOnOSX(const std::string &fileName) { @@ -93,11 +93,11 @@ bool producesObjectFileOnOSX(const std::string &fileName) { } XcodeProvider::Group::Group(XcodeProvider *objectParent, const std::string &groupName, const std::string &uniqueName, const std::string &path) : Object(objectParent, uniqueName, groupName, "PBXGroup", "", groupName) { - addProperty("name", _name, "", SettingsNoValue | SettingsQuoteVariable); - addProperty("sourceTree", "", "", SettingsNoValue | SettingsQuoteVariable); + addProperty("name", _name, "", kSettingsNoValue | kSettingsQuoteVariable); + addProperty("sourceTree", "", "", kSettingsNoValue | kSettingsQuoteVariable); if (path != "") { - addProperty("path", path, "", SettingsNoValue | SettingsQuoteVariable); + addProperty("path", path, "", kSettingsNoValue | kSettingsQuoteVariable); } _childOrder = 0; _treeName = uniqueName; @@ -117,16 +117,16 @@ void XcodeProvider::Group::addChildInternal(const std::string &id, const std::st if (_properties.find("children") == _properties.end()) { Property children; children._hasOrder = true; - children._flags = SettingsAsList; + children._flags = kSettingsAsList; _properties["children"] = children; } - _properties["children"]._settings[id] = Setting("", comment + " in Sources", SettingsNoValue, 0, _childOrder++); + _properties["children"]._settings[id] = Setting("", comment + " in Sources", kSettingsNoValue, 0, _childOrder++); if (_childOrder == 1) { // Force children to use () even when there is only 1 child. // Also this enforces the use of "," after the single item, instead of ; (see writeProperty) - _properties["children"]._flags |= SettingsSingleItem; + _properties["children"]._flags |= kSettingsSingleItem; } else { - _properties["children"]._flags ^= SettingsSingleItem; + _properties["children"]._flags ^= kSettingsSingleItem; } } @@ -180,31 +180,31 @@ XcodeProvider::Group *XcodeProvider::touchGroupsForPath(const std::string &path) void XcodeProvider::addFileReference(const std::string &id, const std::string &name, FileProperty properties) { Object *fileRef = new Object(this, id, name, "PBXFileReference", "PBXFileReference", name); - if (!properties._fileEncoding.empty()) fileRef->addProperty("fileEncoding", properties._fileEncoding, "", SettingsNoValue); - if (!properties._lastKnownFileType.empty()) fileRef->addProperty("lastKnownFileType", properties._lastKnownFileType, "", SettingsNoValue | SettingsQuoteVariable); - if (!properties._fileName.empty()) fileRef->addProperty("name", properties._fileName, "", SettingsNoValue | SettingsQuoteVariable); - if (!properties._filePath.empty()) fileRef->addProperty("path", properties._filePath, "", SettingsNoValue | SettingsQuoteVariable); - if (!properties._sourceTree.empty()) fileRef->addProperty("sourceTree", properties._sourceTree, "", SettingsNoValue); + if (!properties._fileEncoding.empty()) fileRef->addProperty("fileEncoding", properties._fileEncoding, "", kSettingsNoValue); + if (!properties._lastKnownFileType.empty()) fileRef->addProperty("lastKnownFileType", properties._lastKnownFileType, "", kSettingsNoValue | kSettingsQuoteVariable); + if (!properties._fileName.empty()) fileRef->addProperty("name", properties._fileName, "", kSettingsNoValue | kSettingsQuoteVariable); + if (!properties._filePath.empty()) fileRef->addProperty("path", properties._filePath, "", kSettingsNoValue | kSettingsQuoteVariable); + if (!properties._sourceTree.empty()) fileRef->addProperty("sourceTree", properties._sourceTree, "", kSettingsNoValue); _fileReference.add(fileRef); - _fileReference._flags = SettingsSingleItem; + _fileReference._flags = kSettingsSingleItem; } void XcodeProvider::addProductFileReference(const std::string &id, const std::string &name) { Object *fileRef = new Object(this, id, name, "PBXFileReference", "PBXFileReference", name); - fileRef->addProperty("explicitFileType", "compiled.mach-o.executable", "", SettingsNoValue | SettingsQuoteVariable); - fileRef->addProperty("includeInIndex", "0", "", SettingsNoValue); - fileRef->addProperty("path", name, "", SettingsNoValue | SettingsQuoteVariable); - fileRef->addProperty("sourceTree", "BUILT_PRODUCTS_DIR", "", SettingsNoValue); + fileRef->addProperty("explicitFileType", "compiled.mach-o.executable", "", kSettingsNoValue | kSettingsQuoteVariable); + fileRef->addProperty("includeInIndex", "0", "", kSettingsNoValue); + fileRef->addProperty("path", name, "", kSettingsNoValue | kSettingsQuoteVariable); + fileRef->addProperty("sourceTree", "BUILT_PRODUCTS_DIR", "", kSettingsNoValue); _fileReference.add(fileRef); - _fileReference._flags = SettingsSingleItem; + _fileReference._flags = kSettingsSingleItem; } void XcodeProvider::addBuildFile(const std::string &id, const std::string &name, const std::string &fileRefId, const std::string &comment) { Object *buildFile = new Object(this, id, name, "PBXBuildFile", "PBXBuildFile", comment); - buildFile->addProperty("fileRef", fileRefId, name, SettingsNoValue); + buildFile->addProperty("fileRef", fileRefId, name, kSettingsNoValue); _buildFile.add(buildFile); - _buildFile._flags = SettingsSingleItem; + _buildFile._flags = kSettingsSingleItem; } XcodeProvider::XcodeProvider(StringList &global_warnings, std::map &project_warnings, const int version) @@ -274,10 +274,10 @@ void XcodeProvider::ouputMainProjectFile(const BuildSetup &setup) { // Header project << "// !$*UTF8*$!\n" "{\n" - "\t" << writeSetting("archiveVersion", "1", "", SettingsNoQuote) << ";\n" + "\t" << writeSetting("archiveVersion", "1", "", kSettingsNoQuote) << ";\n" "\tclasses = {\n" "\t};\n" - "\t" << writeSetting("objectVersion", "46", "", SettingsNoQuote) << ";\n" + "\t" << writeSetting("objectVersion", "46", "", kSettingsNoQuote) << ";\n" "\tobjects = {\n"; ////////////////////////////////////////////////////////////////////////// @@ -297,7 +297,7 @@ void XcodeProvider::ouputMainProjectFile(const BuildSetup &setup) { ////////////////////////////////////////////////////////////////////////// // Footer project << "\t};\n" - "\t" << writeSetting("rootObject", getHash("PBXProject"), "Project object", SettingsNoQuote) << ";\n" + "\t" << writeSetting("rootObject", getHash("PBXProject"), "Project object", kSettingsNoQuote) << ";\n" "}\n"; } @@ -350,7 +350,7 @@ void XcodeProvider::setupFrameworksBuildPhase() { Property children; children._hasOrder = true; - children._flags = SettingsAsList; + children._flags = kSettingsAsList; // Setup framework file properties std::map properties; @@ -393,13 +393,13 @@ void XcodeProvider::setupFrameworksBuildPhase() { // iPhone Object *framework_iPhone = new Object(this, "PBXFrameworksBuildPhase_" + _targets[IOS_TARGET], "PBXFrameworksBuildPhase", "PBXFrameworksBuildPhase", "", "Frameworks"); - framework_iPhone->addProperty("buildActionMask", "2147483647", "", SettingsNoValue); - framework_iPhone->addProperty("runOnlyForDeploymentPostprocessing", "0", "", SettingsNoValue); + framework_iPhone->addProperty("buildActionMask", "2147483647", "", kSettingsNoValue); + framework_iPhone->addProperty("runOnlyForDeploymentPostprocessing", "0", "", kSettingsNoValue); // List of frameworks Property iPhone_files; iPhone_files._hasOrder = true; - iPhone_files._flags = SettingsAsList; + iPhone_files._flags = kSettingsAsList; ValueList frameworks_iPhone; frameworks_iPhone.push_back("CoreAudio.framework"); @@ -431,13 +431,13 @@ void XcodeProvider::setupFrameworksBuildPhase() { // ScummVM-OS X Object *framework_OSX = new Object(this, "PBXFrameworksBuildPhase_" + _targets[OSX_TARGET], "PBXFrameworksBuildPhase", "PBXFrameworksBuildPhase", "", "Frameworks"); - framework_OSX->addProperty("buildActionMask", "2147483647", "", SettingsNoValue); - framework_OSX->addProperty("runOnlyForDeploymentPostprocessing", "0", "", SettingsNoValue); + framework_OSX->addProperty("buildActionMask", "2147483647", "", kSettingsNoValue); + framework_OSX->addProperty("runOnlyForDeploymentPostprocessing", "0", "", kSettingsNoValue); // List of frameworks Property osx_files; osx_files._hasOrder = true; - osx_files._flags = SettingsAsList; + osx_files._flags = kSettingsAsList; ValueList frameworks_osx; frameworks_osx.push_back("CoreFoundation.framework"); @@ -473,13 +473,13 @@ void XcodeProvider::setupFrameworksBuildPhase() { // Simulator Object *framework_simulator = new Object(this, "PBXFrameworksBuildPhase_" + _targets[SIM_TARGET], "PBXFrameworksBuildPhase", "PBXFrameworksBuildPhase", "", "Frameworks"); - framework_simulator->addProperty("buildActionMask", "2147483647", "", SettingsNoValue); - framework_simulator->addProperty("runOnlyForDeploymentPostprocessing", "0", "", SettingsNoValue); + framework_simulator->addProperty("buildActionMask", "2147483647", "", kSettingsNoValue); + framework_simulator->addProperty("runOnlyForDeploymentPostprocessing", "0", "", kSettingsNoValue); // List of frameworks Property simulator_files; simulator_files._hasOrder = true; - simulator_files._flags = SettingsAsList; + simulator_files._flags = kSettingsAsList; ValueList frameworks_simulator; frameworks_simulator.push_back("CoreAudio.framework"); @@ -520,26 +520,26 @@ void XcodeProvider::setupNativeTarget() { #endif Object *target = new Object(this, "PBXNativeTarget_" + _targets[i], "PBXNativeTarget", "PBXNativeTarget", "", _targets[i]); - target->addProperty("buildConfigurationList", getHash("XCConfigurationList_" + _targets[i]), "Build configuration list for PBXNativeTarget \"" + _targets[i] + "\"", SettingsNoValue); + target->addProperty("buildConfigurationList", getHash("XCConfigurationList_" + _targets[i]), "Build configuration list for PBXNativeTarget \"" + _targets[i] + "\"", kSettingsNoValue); Property buildPhases; buildPhases._hasOrder = true; - buildPhases._flags = SettingsAsList; - buildPhases._settings[getHash("PBXResourcesBuildPhase_" + _targets[i])] = Setting("", "Resources", SettingsNoValue, 0, 0); - buildPhases._settings[getHash("PBXSourcesBuildPhase_" + _targets[i])] = Setting("", "Sources", SettingsNoValue, 0, 1); - buildPhases._settings[getHash("PBXFrameworksBuildPhase_" + _targets[i])] = Setting("", "Frameworks", SettingsNoValue, 0, 2); + buildPhases._flags = kSettingsAsList; + buildPhases._settings[getHash("PBXResourcesBuildPhase_" + _targets[i])] = Setting("", "Resources", kSettingsNoValue, 0, 0); + buildPhases._settings[getHash("PBXSourcesBuildPhase_" + _targets[i])] = Setting("", "Sources", kSettingsNoValue, 0, 1); + buildPhases._settings[getHash("PBXFrameworksBuildPhase_" + _targets[i])] = Setting("", "Frameworks", kSettingsNoValue, 0, 2); target->_properties["buildPhases"] = buildPhases; - target->addProperty("buildRules", "", "", SettingsNoValue | SettingsAsList); + target->addProperty("buildRules", "", "", kSettingsNoValue | kSettingsAsList); - target->addProperty("dependencies", "", "", SettingsNoValue | SettingsAsList); + target->addProperty("dependencies", "", "", kSettingsNoValue | kSettingsAsList); - target->addProperty("name", _targets[i], "", SettingsNoValue | SettingsQuoteVariable); - target->addProperty("productName", PROJECT_NAME, "", SettingsNoValue); + target->addProperty("name", _targets[i], "", kSettingsNoValue | kSettingsQuoteVariable); + target->addProperty("productName", PROJECT_NAME, "", kSettingsNoValue); addProductFileReference("PBXFileReference_" PROJECT_DESCRIPTION ".app_" + _targets[i], PROJECT_DESCRIPTION ".app"); productsGroup->addChildByHash(getHash("PBXFileReference_" PROJECT_DESCRIPTION ".app_" + _targets[i]), PROJECT_DESCRIPTION ".app"); - target->addProperty("productReference", getHash("PBXFileReference_" PROJECT_DESCRIPTION ".app_" + _targets[i]), PROJECT_DESCRIPTION ".app", SettingsNoValue); - target->addProperty("productType", "com.apple.product-type.application", "", SettingsNoValue | SettingsQuoteVariable); + target->addProperty("productReference", getHash("PBXFileReference_" PROJECT_DESCRIPTION ".app_" + _targets[i]), PROJECT_DESCRIPTION ".app", kSettingsNoValue); + target->addProperty("productType", "com.apple.product-type.application", "", kSettingsNoValue | kSettingsQuoteVariable); _nativeTarget.add(target); } @@ -552,38 +552,38 @@ void XcodeProvider::setupProject() { Object *project = new Object(this, "PBXProject", "PBXProject", "PBXProject", "", "Project object"); - project->addProperty("buildConfigurationList", getHash("XCConfigurationList_scummvm"), "Build configuration list for PBXProject \"" PROJECT_NAME "\"", SettingsNoValue); - project->addProperty("compatibilityVersion", "Xcode 3.2", "", SettingsNoValue | SettingsQuoteVariable); - project->addProperty("developmentRegion", "English", "", SettingsNoValue); - project->addProperty("hasScannedForEncodings", "1", "", SettingsNoValue); + project->addProperty("buildConfigurationList", getHash("XCConfigurationList_scummvm"), "Build configuration list for PBXProject \"" PROJECT_NAME "\"", kSettingsNoValue); + project->addProperty("compatibilityVersion", "Xcode 3.2", "", kSettingsNoValue | kSettingsQuoteVariable); + project->addProperty("developmentRegion", "English", "", kSettingsNoValue); + project->addProperty("hasScannedForEncodings", "1", "", kSettingsNoValue); // List of known regions Property regions; - regions._flags = SettingsAsList; + regions._flags = kSettingsAsList; ADD_SETTING_ORDER_NOVALUE(regions, "English", "", 0); ADD_SETTING_ORDER_NOVALUE(regions, "Japanese", "", 1); ADD_SETTING_ORDER_NOVALUE(regions, "French", "", 2); ADD_SETTING_ORDER_NOVALUE(regions, "German", "", 3); project->_properties["knownRegions"] = regions; - project->addProperty("mainGroup", _rootSourceGroup->getHashRef(), "CustomTemplate", SettingsNoValue); - project->addProperty("projectDirPath", _projectRoot, "", SettingsNoValue | SettingsQuoteVariable); - project->addProperty("projectRoot", "", "", SettingsNoValue | SettingsQuoteVariable); + project->addProperty("mainGroup", _rootSourceGroup->getHashRef(), "CustomTemplate", kSettingsNoValue); + project->addProperty("projectDirPath", _projectRoot, "", kSettingsNoValue | kSettingsQuoteVariable); + project->addProperty("projectRoot", "", "", kSettingsNoValue | kSettingsQuoteVariable); // List of targets Property targets; - targets._flags = SettingsAsList; + targets._flags = kSettingsAsList; #ifdef ENABLE_IOS - targets._settings[getHash("PBXNativeTarget_" + _targets[IOS_TARGET])] = Setting("", _targets[IOS_TARGET], SettingsNoValue, 0, 0); + targets._settings[getHash("PBXNativeTarget_" + _targets[IOS_TARGET])] = Setting("", _targets[IOS_TARGET], kSettingsNoValue, 0, 0); #endif - targets._settings[getHash("PBXNativeTarget_" + _targets[OSX_TARGET])] = Setting("", _targets[OSX_TARGET], SettingsNoValue, 0, 1); + targets._settings[getHash("PBXNativeTarget_" + _targets[OSX_TARGET])] = Setting("", _targets[OSX_TARGET], kSettingsNoValue, 0, 1); #ifdef ENABLE_IOS - targets._settings[getHash("PBXNativeTarget_" + _targets[SIM_TARGET])] = Setting("", _targets[SIM_TARGET], SettingsNoValue, 0, 2); + targets._settings[getHash("PBXNativeTarget_" + _targets[SIM_TARGET])] = Setting("", _targets[SIM_TARGET], kSettingsNoValue, 0, 2); #endif project->_properties["targets"] = targets; #ifndef ENABLE_IOS // Force list even when there is only a single target - project->_properties["targets"]._flags |= SettingsSingleItem; + project->_properties["targets"]._flags |= kSettingsSingleItem; #endif _project.add(project); @@ -615,12 +615,12 @@ void XcodeProvider::setupResourcesBuildPhase() { for (unsigned int i = 0; i < _targets.size(); i++) { Object *resource = new Object(this, "PBXResourcesBuildPhase_" + _targets[i], "PBXResourcesBuildPhase", "PBXResourcesBuildPhase", "", "Resources"); - resource->addProperty("buildActionMask", "2147483647", "", SettingsNoValue); + resource->addProperty("buildActionMask", "2147483647", "", kSettingsNoValue); // Add default files Property files; files._hasOrder = true; - files._flags = SettingsAsList; + files._flags = kSettingsAsList; ValueList files_list; files_list.push_back("scummclassic.zip"); @@ -651,7 +651,7 @@ void XcodeProvider::setupResourcesBuildPhase() { // Add custom files depending on the target if (_targets[i] == PROJECT_DESCRIPTION "-OS X") { - files._settings[getHash("PBXResources_" PROJECT_NAME ".icns")] = Setting("", PROJECT_NAME ".icns in Resources", SettingsNoValue, 0, 6); + files._settings[getHash("PBXResources_" PROJECT_NAME ".icns")] = Setting("", PROJECT_NAME ".icns in Resources", kSettingsNoValue, 0, 6); // Remove 2 iphone icon files files._settings.erase(getHash("PBXResources_Default.png")); @@ -660,7 +660,7 @@ void XcodeProvider::setupResourcesBuildPhase() { resource->_properties["files"] = files; - resource->addProperty("runOnlyForDeploymentPostprocessing", "0", "", SettingsNoValue); + resource->addProperty("runOnlyForDeploymentPostprocessing", "0", "", kSettingsNoValue); _resourcesBuildPhase.add(resource); } @@ -676,11 +676,11 @@ void XcodeProvider::setupSourcesBuildPhase() { for (unsigned int i = 0; i < _targets.size(); i++) { Object *source = new Object(this, "PBXSourcesBuildPhase_" + _targets[i], "PBXSourcesBuildPhase", "PBXSourcesBuildPhase", "", "Sources"); - source->addProperty("buildActionMask", "2147483647", "", SettingsNoValue); + source->addProperty("buildActionMask", "2147483647", "", kSettingsNoValue); Property files; files._hasOrder = true; - files._flags = SettingsAsList; + files._flags = kSettingsAsList; int order = 0; for (std::vector::iterator file = _buildFile._objects.begin(); file != _buildFile._objects.end(); ++file) { @@ -693,7 +693,7 @@ void XcodeProvider::setupSourcesBuildPhase() { source->_properties["files"] = files; - source->addProperty("runOnlyForDeploymentPostprocessing", "0", "", SettingsNoValue); + source->addProperty("runOnlyForDeploymentPostprocessing", "0", "", kSettingsNoValue); _sourcesBuildPhase.add(source); } @@ -703,7 +703,7 @@ void XcodeProvider::setupSourcesBuildPhase() { void XcodeProvider::setupBuildConfiguration() { _buildConfiguration._comment = "XCBuildConfiguration"; - _buildConfiguration._flags = SettingsAsList; + _buildConfiguration._flags = kSettingsAsList; ///**************************************** // * iPhone @@ -721,7 +721,7 @@ void XcodeProvider::setupBuildConfiguration() { ValueList iPhone_FrameworkSearchPaths; iPhone_FrameworkSearchPaths.push_back("$(inherited)"); iPhone_FrameworkSearchPaths.push_back("\"$(SDKROOT)$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks\""); - ADD_SETTING_LIST(iPhone_Debug, "FRAMEWORK_SEARCH_PATHS", iPhone_FrameworkSearchPaths, SettingsAsList, 5); + ADD_SETTING_LIST(iPhone_Debug, "FRAMEWORK_SEARCH_PATHS", iPhone_FrameworkSearchPaths, kSettingsAsList, 5); ADD_SETTING(iPhone_Debug, "GCC_DYNAMIC_NO_PIC", "NO"); ADD_SETTING(iPhone_Debug, "GCC_ENABLE_CPP_EXCEPTIONS", "NO"); ADD_SETTING(iPhone_Debug, "GCC_ENABLE_FIX_AND_CONTINUE", "NO"); @@ -734,12 +734,12 @@ void XcodeProvider::setupBuildConfiguration() { iPhone_HeaderSearchPaths.push_back("$(SRCROOT)/engines/"); iPhone_HeaderSearchPaths.push_back("$(SRCROOT)"); iPhone_HeaderSearchPaths.push_back("include/"); - ADD_SETTING_LIST(iPhone_Debug, "HEADER_SEARCH_PATHS", iPhone_HeaderSearchPaths, SettingsAsList | SettingsQuoteVariable, 5); + ADD_SETTING_LIST(iPhone_Debug, "HEADER_SEARCH_PATHS", iPhone_HeaderSearchPaths, kSettingsAsList | kSettingsQuoteVariable, 5); ADD_SETTING(iPhone_Debug, "INFOPLIST_FILE", "Info.plist"); ValueList iPhone_LibPaths; iPhone_LibPaths.push_back("$(inherited)"); iPhone_LibPaths.push_back("\"$(SRCROOT)/lib\""); - ADD_SETTING_LIST(iPhone_Debug, "LIBRARY_SEARCH_PATHS", iPhone_LibPaths, SettingsAsList, 5); + ADD_SETTING_LIST(iPhone_Debug, "LIBRARY_SEARCH_PATHS", iPhone_LibPaths, kSettingsAsList, 5); ADD_SETTING(iPhone_Debug, "ONLY_ACTIVE_ARCH", "YES"); ADD_SETTING(iPhone_Debug, "PREBINDING", "NO"); ADD_SETTING(iPhone_Debug, "PRODUCT_NAME", PROJECT_DESCRIPTION); @@ -748,7 +748,7 @@ void XcodeProvider::setupBuildConfiguration() { ADD_SETTING(iPhone_Debug, "SDKROOT", "iphoneos4.0"); ADD_SETTING_QUOTE(iPhone_Debug, "TARGETED_DEVICE_FAMILY", "1,2"); - iPhone_Debug_Object->addProperty("name", "Debug", "", SettingsNoValue); + iPhone_Debug_Object->addProperty("name", "Debug", "", kSettingsNoValue); iPhone_Debug_Object->_properties["buildSettings"] = iPhone_Debug; // Release @@ -759,7 +759,7 @@ void XcodeProvider::setupBuildConfiguration() { REMOVE_SETTING(iPhone_Release, "GCC_DYNAMIC_NO_PIC"); ADD_SETTING(iPhone_Release, "WRAPPER_EXTENSION", "app"); - iPhone_Release_Object->addProperty("name", "Release", "", SettingsNoValue); + iPhone_Release_Object->addProperty("name", "Release", "", kSettingsNoValue); iPhone_Release_Object->_properties["buildSettings"] = iPhone_Release; _buildConfiguration.add(iPhone_Debug_Object); @@ -787,7 +787,7 @@ void XcodeProvider::setupBuildConfiguration() { ADD_DEFINE(scummvm_defines, "IPHONE"); ADD_DEFINE(scummvm_defines, "XCODE"); ADD_DEFINE(scummvm_defines, "IPHONE_OFFICIAL"); - ADD_SETTING_LIST(scummvm_Debug, "GCC_PREPROCESSOR_DEFINITIONS", scummvm_defines, SettingsNoQuote | SettingsAsList, 5); + ADD_SETTING_LIST(scummvm_Debug, "GCC_PREPROCESSOR_DEFINITIONS", scummvm_defines, kSettingsNoQuote | kSettingsAsList, 5); ADD_SETTING(scummvm_Debug, "GCC_THUMB_SUPPORT", "NO"); ADD_SETTING(scummvm_Debug, "GCC_USE_GCC3_PFE_SUPPORT", "NO"); ADD_SETTING(scummvm_Debug, "GCC_WARN_ABOUT_RETURN_TYPE", "YES"); @@ -796,7 +796,7 @@ void XcodeProvider::setupBuildConfiguration() { scummvm_HeaderPaths.push_back("include/"); scummvm_HeaderPaths.push_back("$(SRCROOT)/engines/"); scummvm_HeaderPaths.push_back("$(SRCROOT)"); - ADD_SETTING_LIST(scummvm_Debug, "HEADER_SEARCH_PATHS", scummvm_HeaderPaths, SettingsQuoteVariable | SettingsAsList, 5); + ADD_SETTING_LIST(scummvm_Debug, "HEADER_SEARCH_PATHS", scummvm_HeaderPaths, kSettingsQuoteVariable | kSettingsAsList, 5); ADD_SETTING_QUOTE(scummvm_Debug, "LIBRARY_SEARCH_PATHS", ""); ADD_SETTING(scummvm_Debug, "ONLY_ACTIVE_ARCH", "YES"); ADD_SETTING_QUOTE(scummvm_Debug, "OTHER_CFLAGS", ""); @@ -804,7 +804,7 @@ void XcodeProvider::setupBuildConfiguration() { ADD_SETTING(scummvm_Debug, "PREBINDING", "NO"); ADD_SETTING(scummvm_Debug, "SDKROOT", "macosx"); - scummvm_Debug_Object->addProperty("name", "Debug", "", SettingsNoValue); + scummvm_Debug_Object->addProperty("name", "Debug", "", kSettingsNoValue); scummvm_Debug_Object->_properties["buildSettings"] = scummvm_Debug; // Release @@ -815,7 +815,7 @@ void XcodeProvider::setupBuildConfiguration() { REMOVE_SETTING(scummvm_Release, "GCC_WARN_UNUSED_VARIABLE"); REMOVE_SETTING(scummvm_Release, "ONLY_ACTIVE_ARCH"); - scummvm_Release_Object->addProperty("name", "Release", "", SettingsNoValue); + scummvm_Release_Object->addProperty("name", "Release", "", kSettingsNoValue); scummvm_Release_Object->_properties["buildSettings"] = scummvm_Release; _buildConfiguration.add(scummvm_Debug_Object); @@ -844,7 +844,7 @@ void XcodeProvider::setupBuildConfiguration() { ValueList scummvmOSX_defines(_defines); ADD_DEFINE(scummvmOSX_defines, "SDL_BACKEND"); ADD_DEFINE(scummvmOSX_defines, "MACOSX"); - ADD_SETTING_LIST(scummvmOSX_Debug, "GCC_PREPROCESSOR_DEFINITIONS", scummvmOSX_defines, SettingsNoQuote | SettingsAsList, 5); + ADD_SETTING_LIST(scummvmOSX_Debug, "GCC_PREPROCESSOR_DEFINITIONS", scummvmOSX_defines, kSettingsNoQuote | kSettingsAsList, 5); ADD_SETTING_QUOTE(scummvmOSX_Debug, "GCC_VERSION", ""); ValueList scummvmOSX_HeaderPaths; scummvmOSX_HeaderPaths.push_back("/opt/local/include/SDL"); @@ -853,14 +853,14 @@ void XcodeProvider::setupBuildConfiguration() { scummvmOSX_HeaderPaths.push_back("include/"); scummvmOSX_HeaderPaths.push_back("$(SRCROOT)/engines/"); scummvmOSX_HeaderPaths.push_back("$(SRCROOT)"); - ADD_SETTING_LIST(scummvmOSX_Debug, "HEADER_SEARCH_PATHS", scummvmOSX_HeaderPaths, SettingsQuoteVariable | SettingsAsList, 5); + ADD_SETTING_LIST(scummvmOSX_Debug, "HEADER_SEARCH_PATHS", scummvmOSX_HeaderPaths, kSettingsQuoteVariable | kSettingsAsList, 5); ADD_SETTING_QUOTE(scummvmOSX_Debug, "INFOPLIST_FILE", "$(SRCROOT)/dists/macosx/Info.plist"); ValueList scummvmOSX_LibPaths; scummvmOSX_LibPaths.push_back("/sw/lib"); scummvmOSX_LibPaths.push_back("/opt/local/lib"); scummvmOSX_LibPaths.push_back("\"$(inherited)\""); scummvmOSX_LibPaths.push_back("\"\\\\\\\"$(SRCROOT)/lib\\\\\\\"\""); // mmmh, all those slashes, it's almost Christmas \o/ - ADD_SETTING_LIST(scummvmOSX_Debug, "LIBRARY_SEARCH_PATHS", scummvmOSX_LibPaths, SettingsNoQuote | SettingsAsList, 5); + ADD_SETTING_LIST(scummvmOSX_Debug, "LIBRARY_SEARCH_PATHS", scummvmOSX_LibPaths, kSettingsNoQuote | kSettingsAsList, 5); ADD_SETTING_QUOTE(scummvmOSX_Debug, "OTHER_CFLAGS", ""); ValueList scummvmOSX_LdFlags; scummvmOSX_LdFlags.push_back("-lSDLmain"); @@ -875,11 +875,11 @@ void XcodeProvider::setupBuildConfiguration() { scummvmOSX_LdFlags.push_back("-lFLAC"); scummvmOSX_LdFlags.push_back("-lSDL"); scummvmOSX_LdFlags.push_back("-lz"); - ADD_SETTING_LIST(scummvmOSX_Debug, "OTHER_LDFLAGS", scummvmOSX_LdFlags, SettingsAsList, 5); + ADD_SETTING_LIST(scummvmOSX_Debug, "OTHER_LDFLAGS", scummvmOSX_LdFlags, kSettingsAsList, 5); ADD_SETTING(scummvmOSX_Debug, "PREBINDING", "NO"); ADD_SETTING(scummvmOSX_Debug, "PRODUCT_NAME", PROJECT_DESCRIPTION); - scummvmOSX_Debug_Object->addProperty("name", "Debug", "", SettingsNoValue); + scummvmOSX_Debug_Object->addProperty("name", "Debug", "", kSettingsNoValue); scummvmOSX_Debug_Object->_properties["buildSettings"] = scummvmOSX_Debug; // Release @@ -890,7 +890,7 @@ void XcodeProvider::setupBuildConfiguration() { REMOVE_SETTING(scummvmOSX_Release, "GCC_OPTIMIZATION_LEVEL"); ADD_SETTING(scummvmOSX_Release, "WRAPPER_EXTENSION", "app"); - scummvmOSX_Release_Object->addProperty("name", "Release", "", SettingsNoValue); + scummvmOSX_Release_Object->addProperty("name", "Release", "", kSettingsNoValue); scummvmOSX_Release_Object->_properties["buildSettings"] = scummvmOSX_Release; _buildConfiguration.add(scummvmOSX_Debug_Object); @@ -904,12 +904,12 @@ void XcodeProvider::setupBuildConfiguration() { Object *scummvmSimulator_Debug_Object = new Object(this, "XCBuildConfiguration_" PROJECT_DESCRIPTION "-Simulator_Debug", _targets[SIM_TARGET] /* ScummVM-Simulator */, "XCBuildConfiguration", "PBXNativeTarget", "Debug"); Property scummvmSimulator_Debug(iPhone_Debug); ADD_SETTING_QUOTE(scummvmSimulator_Debug, "FRAMEWORK_SEARCH_PATHS", "$(inherited)"); - ADD_SETTING_LIST(scummvmSimulator_Debug, "GCC_PREPROCESSOR_DEFINITIONS", scummvm_defines, SettingsNoQuote | SettingsAsList, 5); + ADD_SETTING_LIST(scummvmSimulator_Debug, "GCC_PREPROCESSOR_DEFINITIONS", scummvm_defines, kSettingsNoQuote | kSettingsAsList, 5); ADD_SETTING(scummvmSimulator_Debug, "SDKROOT", "iphonesimulator3.2"); ADD_SETTING_QUOTE(scummvmSimulator_Debug, "VALID_ARCHS", "i386 x86_64"); REMOVE_SETTING(scummvmSimulator_Debug, "TARGETED_DEVICE_FAMILY"); - scummvmSimulator_Debug_Object->addProperty("name", "Debug", "", SettingsNoValue); + scummvmSimulator_Debug_Object->addProperty("name", "Debug", "", kSettingsNoValue); scummvmSimulator_Debug_Object->_properties["buildSettings"] = scummvmSimulator_Debug; // Release @@ -920,7 +920,7 @@ void XcodeProvider::setupBuildConfiguration() { REMOVE_SETTING(scummvmSimulator_Release, "GCC_DYNAMIC_NO_PIC"); ADD_SETTING(scummvmSimulator_Release, "WRAPPER_EXTENSION", "app"); - scummvmSimulator_Release_Object->addProperty("name", "Release", "", SettingsNoValue); + scummvmSimulator_Release_Object->addProperty("name", "Release", "", kSettingsNoValue); scummvmSimulator_Release_Object->_properties["buildSettings"] = scummvmSimulator_Release; _buildConfiguration.add(scummvmSimulator_Debug_Object); @@ -929,7 +929,7 @@ void XcodeProvider::setupBuildConfiguration() { ////////////////////////////////////////////////////////////////////////// // Configuration List _configurationList._comment = "XCConfigurationList"; - _configurationList._flags = SettingsAsList; + _configurationList._flags = kSettingsAsList; #endif // Warning: This assumes we have all configurations with a Debug & Release pair for (std::vector::iterator config = _buildConfiguration._objects.begin(); config != _buildConfiguration._objects.end(); config++) { @@ -937,15 +937,15 @@ void XcodeProvider::setupBuildConfiguration() { Object *configList = new Object(this, "XCConfigurationList_" + (*config)->_name, (*config)->_name, "XCConfigurationList", "", "Build configuration list for " + (*config)->_refType + " \"" + (*config)->_name + "\""); Property buildConfigs; - buildConfigs._flags = SettingsAsList; + buildConfigs._flags = kSettingsAsList; - buildConfigs._settings[getHash((*config)->_id)] = Setting("", "Debug", SettingsNoValue, 0, 0); - buildConfigs._settings[getHash((*(++config))->_id)] = Setting("", "Release", SettingsNoValue, 0, 1); + buildConfigs._settings[getHash((*config)->_id)] = Setting("", "Debug", kSettingsNoValue, 0, 0); + buildConfigs._settings[getHash((*(++config))->_id)] = Setting("", "Release", kSettingsNoValue, 0, 1); configList->_properties["buildConfigurations"] = buildConfigs; - configList->addProperty("defaultConfigurationIsVisible", "0", "", SettingsNoValue); - configList->addProperty("defaultConfigurationName", "Release", "", SettingsNoValue); + configList->addProperty("defaultConfigurationIsVisible", "0", "", kSettingsNoValue); + configList->addProperty("defaultConfigurationName", "Release", "", kSettingsNoValue); _configurationList.add(configList); } @@ -1032,30 +1032,30 @@ std::string replace(std::string input, const std::string find, std::string repla std::string XcodeProvider::writeProperty(const std::string &variable, Property &prop, int flags) const { std::string output; - output += (flags & SettingsSingleItem ? "" : "\t\t\t") + variable + " = "; + output += (flags & kSettingsSingleItem ? "" : "\t\t\t") + variable + " = "; - if (prop._settings.size() > 1 || (prop._flags & SettingsSingleItem)) - output += (prop._flags & SettingsAsList) ? "(\n" : "{\n"; + if (prop._settings.size() > 1 || (prop._flags & kSettingsSingleItem)) + output += (prop._flags & kSettingsAsList) ? "(\n" : "{\n"; OrderedSettingList settings = prop.getOrderedSettingList(); for (OrderedSettingList::const_iterator setting = settings.begin(); setting != settings.end(); ++setting) { - if (settings.size() > 1 || (prop._flags & SettingsSingleItem)) - output += (flags & SettingsSingleItem ? " " : "\t\t\t\t"); + if (settings.size() > 1 || (prop._flags & kSettingsSingleItem)) + output += (flags & kSettingsSingleItem ? " " : "\t\t\t\t"); output += writeSetting(setting->first, setting->second); - // The combination of SettingsAsList, and SettingsSingleItem should use "," and not ";" (i.e children + // The combination of kSettingsAsList, and kSettingsSingleItem should use "," and not ";" (i.e children // in PBXGroup, so we special case that case here. - if ((prop._flags & SettingsAsList) && (prop._settings.size() > 1 || (prop._flags & SettingsSingleItem))) { + if ((prop._flags & kSettingsAsList) && (prop._settings.size() > 1 || (prop._flags & kSettingsSingleItem))) { output += (prop._settings.size() > 0) ? ",\n" : "\n"; } else { output += ";"; - output += (flags & SettingsSingleItem ? " " : "\n"); + output += (flags & kSettingsSingleItem ? " " : "\n"); } } - if (prop._settings.size() > 1 || (prop._flags & SettingsSingleItem)) - output += (prop._flags & SettingsAsList) ? "\t\t\t);\n" : "\t\t\t};\n"; + if (prop._settings.size() > 1 || (prop._flags & kSettingsSingleItem)) + output += (prop._flags & kSettingsAsList) ? "\t\t\t);\n" : "\t\t\t};\n"; return output; } @@ -1068,7 +1068,7 @@ std::string XcodeProvider::writeSetting(const std::string &variable, std::string // XCode project generator pbuilder_pbx.cpp, writeSettings() (under LGPL 2.1) std::string XcodeProvider::writeSetting(const std::string &variable, const Setting &setting) const { std::string output; - const std::string quote = (setting._flags & SettingsNoQuote) ? "" : "\""; + const std::string quote = (setting._flags & kSettingsNoQuote) ? "" : "\""; const std::string escape_quote = quote.empty() ? "" : "\\" + quote; std::string newline = "\n"; @@ -1077,12 +1077,12 @@ std::string XcodeProvider::writeSetting(const std::string &variable, const Setti newline += "\t"; // Setup variable - std::string var = (setting._flags & SettingsQuoteVariable) ? "\"" + variable + "\"" : variable; + std::string var = (setting._flags & kSettingsQuoteVariable) ? "\"" + variable + "\"" : variable; // Output a list - if (setting._flags & SettingsAsList) { + if (setting._flags & kSettingsAsList) { - output += var + ((setting._flags & SettingsNoValue) ? "(" : " = (") + newline; + output += var + ((setting._flags & kSettingsNoValue) ? "(" : " = (") + newline; for (unsigned int i = 0, count = 0; i < setting._entries.size(); ++i) { @@ -1101,11 +1101,11 @@ std::string XcodeProvider::writeSetting(const std::string &variable, const Setti } // Add closing ")" on new line newline.resize(newline.size() - 1); - output += (setting._flags & SettingsNoValue) ? "\t\t\t)" : "," + newline + ")"; + output += (setting._flags & kSettingsNoValue) ? "\t\t\t)" : "," + newline + ")"; } else { output += var; - output += (setting._flags & SettingsNoValue) ? "" : " = " + quote; + output += (setting._flags & kSettingsNoValue) ? "" : " = " + quote; for (unsigned int i = 0; i < setting._entries.size(); ++i) { std::string value = setting._entries.at(i)._value; @@ -1118,7 +1118,7 @@ std::string XcodeProvider::writeSetting(const std::string &variable, const Setti output += " /* " + comment + " */"; } - output += (setting._flags & SettingsNoValue) ? "" : quote; + output += (setting._flags & kSettingsNoValue) ? "" : quote; } return output; } diff --git a/devtools/create_project/xcode.h b/devtools/create_project/xcode.h index cadd1898a7..d48f11cb19 100644 --- a/devtools/create_project/xcode.h +++ b/devtools/create_project/xcode.h @@ -47,11 +47,11 @@ protected: const StringList &duplicate, const std::string &objPrefix, const std::string &filePrefix); private: enum { - SettingsAsList = 0x01, - SettingsSingleItem = 0x02, - SettingsNoQuote = 0x04, - SettingsQuoteVariable = 0x08, - SettingsNoValue = 0x10 + kSettingsAsList = 0x01, + kSettingsSingleItem = 0x02, + kSettingsNoQuote = 0x04, + kSettingsQuoteVariable = 0x08, + kSettingsNoValue = 0x10 }; // File properties @@ -164,7 +164,7 @@ private: assert(!objectName.empty()); assert(!objectType.empty()); - addProperty("isa", objectType, "", SettingsNoQuote | SettingsNoValue); + addProperty("isa", objectType, "", kSettingsNoQuote | kSettingsNoValue); } // Add a simple Property with just a name and a value @@ -176,7 +176,7 @@ private: std::string output; output = "\t\t" + _parent->getHash(_id) + (_comment.empty() ? "" : " /* " + _comment + " */") + " = {"; - if (flags & SettingsAsList) + if (flags & kSettingsAsList) output += "\n"; // Special case: always output the isa property first @@ -190,7 +190,7 @@ private: output += _parent->writeProperty(property->first, property->second, flags); } - if (flags & SettingsAsList) + if (flags & kSettingsAsList) output += "\t\t"; output += "};\n"; -- cgit v1.2.3 From c09a9aa1bf2e84186d5bd7256670a7b361d95f0f Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Sat, 12 Dec 2015 06:35:05 +0100 Subject: DEVTOOLS: Replace macro by function call. --- devtools/create_project/xcode.cpp | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/devtools/create_project/xcode.cpp b/devtools/create_project/xcode.cpp index ed3ba0f8cc..c5c433c82e 100644 --- a/devtools/create_project/xcode.cpp +++ b/devtools/create_project/xcode.cpp @@ -69,17 +69,6 @@ namespace CreateProjectTool { _buildFile._flags = kSettingsSingleItem; \ } -#define ADD_FILE_REFERENCE(id, name, properties) { \ - Object *fileRef = new Object(this, id, name, "PBXFileReference", "PBXFileReference", name); \ - if (!properties._fileEncoding.empty()) fileRef->addProperty("fileEncoding", properties._fileEncoding, "", kSettingsNoValue); \ - if (!properties._lastKnownFileType.empty()) fileRef->addProperty("lastKnownFileType", properties._lastKnownFileType, "", kSettingsNoValue|kSettingsQuoteVariable); \ - if (!properties._fileName.empty()) fileRef->addProperty("name", properties._fileName, "", kSettingsNoValue|kSettingsQuoteVariable); \ - if (!properties._filePath.empty()) fileRef->addProperty("path", properties._filePath, "", kSettingsNoValue|kSettingsQuoteVariable); \ - if (!properties._sourceTree.empty()) fileRef->addProperty("sourceTree", properties._sourceTree, "", kSettingsNoValue); \ - _fileReference.add(fileRef); \ - _fileReference._flags = kSettingsSingleItem; \ -} - bool producesObjectFileOnOSX(const std::string &fileName) { std::string n, ext; splitFilename(fileName, n, ext); @@ -420,7 +409,7 @@ void XcodeProvider::setupFrameworksBuildPhase() { ADD_SETTING_ORDER_NOVALUE(iPhone_files, getHash(id), comment, order++); ADD_BUILD_FILE(id, *framework, getHash(*framework), comment); - ADD_FILE_REFERENCE(*framework, *framework, properties[*framework]); + addFileReference(*framework, *framework, properties[*framework]); } framework_iPhone->_properties["files"] = iPhone_files; @@ -462,7 +451,7 @@ void XcodeProvider::setupFrameworksBuildPhase() { ADD_SETTING_ORDER_NOVALUE(osx_files, getHash(id), comment, order++); ADD_BUILD_FILE(id, *framework, getHash(*framework), comment); - ADD_FILE_REFERENCE(*framework, *framework, properties[*framework]); + addFileReference(*framework, *framework, properties[*framework]); } framework_OSX->_properties["files"] = osx_files; @@ -497,7 +486,7 @@ void XcodeProvider::setupFrameworksBuildPhase() { ADD_SETTING_ORDER_NOVALUE(simulator_files, getHash(id), comment, order++); ADD_BUILD_FILE(id, *framework, getHash(*framework), comment); - ADD_FILE_REFERENCE(*framework, *framework, properties[*framework]); + addFileReference(*framework, *framework, properties[*framework]); } framework_simulator->_properties["files"] = simulator_files; @@ -646,7 +635,7 @@ void XcodeProvider::setupResourcesBuildPhase() { ADD_SETTING_ORDER_NOVALUE(files, getHash(id), comment, order++); // TODO Fix crash when adding build file for data //ADD_BUILD_FILE(id, *file, comment); - ADD_FILE_REFERENCE(*file, *file, properties[*file]); + addFileReference(*file, *file, properties[*file]); } // Add custom files depending on the target -- cgit v1.2.3 From 2ef9ced7a9a8a2d95f0b017292cca37f681ef4ea Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Sat, 12 Dec 2015 06:44:02 +0100 Subject: DEVTOOLS: Silence compiler warnings in create_access. --- devtools/create_access/amazon_resources.cpp | 2 +- devtools/create_access/amazon_resources.h | 2 +- devtools/create_access/create_access_dat.cpp | 4 ++-- devtools/create_access/martian_resources.cpp | 2 +- devtools/create_access/martian_resources.h | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/devtools/create_access/amazon_resources.cpp b/devtools/create_access/amazon_resources.cpp index 50b8f334fb..8156894b0d 100644 --- a/devtools/create_access/amazon_resources.cpp +++ b/devtools/create_access/amazon_resources.cpp @@ -754,4 +754,4 @@ const char *const IQLABELS_ENG[9] = { const char *const CANT_GET_THERE_ENG = "YOU CAN'T GET THERE FROM HERE."; -}; +} // End of namespace Amazon diff --git a/devtools/create_access/amazon_resources.h b/devtools/create_access/amazon_resources.h index fa281f8f7b..aae27ce3ba 100644 --- a/devtools/create_access/amazon_resources.h +++ b/devtools/create_access/amazon_resources.h @@ -57,6 +57,6 @@ extern const char *const HELPLVLTXT_ENG[3]; extern const char *const IQLABELS_ENG[9]; extern const char *const CANT_GET_THERE_ENG; -}; +} // End of namespace Amazon #endif diff --git a/devtools/create_access/create_access_dat.cpp b/devtools/create_access/create_access_dat.cpp index 0e57f76395..af9ab026c0 100644 --- a/devtools/create_access/create_access_dat.cpp +++ b/devtools/create_access/create_access_dat.cpp @@ -160,7 +160,7 @@ void writeMartianCommonData() { } } -bool processExecutable(int idx, const char *name) { +bool processExecutable(int exeIdx, const char *name) { uint dataSegmentOffset; uint filenamesOffset, numFilenames; uint charsStart, charsEnd; @@ -291,7 +291,7 @@ bool processExecutable(int idx, const char *name) { // Write out header entry uint outputOffset = outputFile.size(); - outputFile.seek(8 + idx * 8); + outputFile.seek(8 + exeIdx * 8); outputFile.writeByte(gameId); outputFile.writeByte(discType); outputFile.writeByte(demoType); diff --git a/devtools/create_access/martian_resources.cpp b/devtools/create_access/martian_resources.cpp index 2a726a78ea..f631ce7e31 100644 --- a/devtools/create_access/martian_resources.cpp +++ b/devtools/create_access/martian_resources.cpp @@ -179,4 +179,4 @@ const char *const INVENTORY_NAMES_ENG[55] = { "MONKEY WRENCH", "BIG DICK CARD", "BRA", "BOLT", nullptr }; -}; +} // End of namespace Amazon diff --git a/devtools/create_access/martian_resources.h b/devtools/create_access/martian_resources.h index c3dfc2a7c2..f80f4c1cf4 100644 --- a/devtools/create_access/martian_resources.h +++ b/devtools/create_access/martian_resources.h @@ -47,6 +47,6 @@ extern const char *const HELPLVLTXT_ENG[3]; extern const char *const IQLABELS_ENG[9]; extern const char *const CANT_GET_THERE_ENG; -}; +} // End of namespace Amazon #endif -- cgit v1.2.3 From 410b5f3d342e1e2e4b06c8c7ae219212d2e5426f Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Sat, 12 Dec 2015 06:46:06 +0100 Subject: DEVTOOLS: Silence compiler warning in convbdf. --- devtools/convbdf.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devtools/convbdf.cpp b/devtools/convbdf.cpp index 21c8af8234..6852fc2f9a 100644 --- a/devtools/convbdf.cpp +++ b/devtools/convbdf.cpp @@ -392,7 +392,7 @@ int main(int argc, char *argv[]) { for (int y = 0; y < box.height; ++y) { printf("// |"); - unsigned char data; + unsigned char data = 0; for (int x = 0; x < box.width; ++x) { if (!(x % 8)) data = *bitmap++; -- cgit v1.2.3 From e7f54aec7db6924c6c01b3c9d96a2e738decb421 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Sat, 12 Dec 2015 06:50:22 +0100 Subject: COMMON: A few formatting fixes. --- common/scummsys.h | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/common/scummsys.h b/common/scummsys.h index b8cf7678a4..7c2978f173 100644 --- a/common/scummsys.h +++ b/common/scummsys.h @@ -23,8 +23,8 @@ #ifndef COMMON_SCUMMSYS_H #define COMMON_SCUMMSYS_H -#ifndef __has_feature // Optional of course. - #define __has_feature(x) 0 // Compatibility with non-clang compilers. +#ifndef __has_feature // Optional of course. + #define __has_feature(x) 0 // Compatibility with non-clang compilers. #endif // This is a convenience macro to test whether the compiler used is a GCC @@ -367,11 +367,11 @@ #endif #ifndef STRINGBUFLEN - #if defined(__N64__) || defined(__DS__) - #define STRINGBUFLEN 256 - #else - #define STRINGBUFLEN 1024 - #endif + #if defined(__N64__) || defined(__DS__) + #define STRINGBUFLEN 256 + #else + #define STRINGBUFLEN 1024 + #endif #endif #ifndef MAXPATHLEN -- cgit v1.2.3 From 84ac8fa7354c4adfa7e2f8914cd564bc7f3927d6 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Sat, 12 Dec 2015 06:50:32 +0100 Subject: DEVTOOLS: A few formatting fixes. --- devtools/convbdf.cpp | 2 +- devtools/create_project/create_project.h | 4 ++-- devtools/create_translations/create_translations.h | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/devtools/convbdf.cpp b/devtools/convbdf.cpp index 6852fc2f9a..59ea5cc4e5 100644 --- a/devtools/convbdf.cpp +++ b/devtools/convbdf.cpp @@ -21,7 +21,7 @@ */ #ifndef __has_feature // Optional of course. - #define __has_feature(x) 0 // Compatibility with non-clang compilers. +#define __has_feature(x) 0 // Compatibility with non-clang compilers. #endif #include diff --git a/devtools/create_project/create_project.h b/devtools/create_project/create_project.h index 459342a67d..1a28946315 100644 --- a/devtools/create_project/create_project.h +++ b/devtools/create_project/create_project.h @@ -23,8 +23,8 @@ #ifndef TOOLS_CREATE_PROJECT_H #define TOOLS_CREATE_PROJECT_H -#ifndef __has_feature // Optional of course. - #define __has_feature(x) 0 // Compatibility with non-clang compilers. +#ifndef __has_feature // Optional of course. +#define __has_feature(x) 0 // Compatibility with non-clang compilers. #endif #include diff --git a/devtools/create_translations/create_translations.h b/devtools/create_translations/create_translations.h index 34a79913ac..e87e3923c3 100644 --- a/devtools/create_translations/create_translations.h +++ b/devtools/create_translations/create_translations.h @@ -26,10 +26,10 @@ typedef unsigned char uint8; typedef unsigned short uint16; typedef unsigned int uint32; -typedef signed short int16; +typedef signed short int16; -#ifndef __has_feature // Optional of course. - #define __has_feature(x) 0 // Compatibility with non-clang compilers. +#ifndef __has_feature // Optional of course. +#define __has_feature(x) 0 // Compatibility with non-clang compilers. #endif #endif /* CREATE_TRANSLATIONS_H */ -- cgit v1.2.3 From 8392fe4f058d56d5a16ef5faad76e440ffa13400 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Sat, 12 Dec 2015 07:02:02 +0100 Subject: DEVTOOLS: More formatting fixes in create_amazon. Powered by astyle. --- devtools/create_access/amazon_resources.cpp | 4 ++-- devtools/create_access/create_access_dat.cpp | 18 +++++++++--------- devtools/create_access/create_access_dat.h | 6 ++---- devtools/create_access/martian_resources.cpp | 4 ++-- 4 files changed, 15 insertions(+), 17 deletions(-) diff --git a/devtools/create_access/amazon_resources.cpp b/devtools/create_access/amazon_resources.cpp index 8156894b0d..f4b642ffbc 100644 --- a/devtools/create_access/amazon_resources.cpp +++ b/devtools/create_access/amazon_resources.cpp @@ -267,7 +267,7 @@ const byte *const CURSORS[AMAZON_NUM_CURSORS] = { }; const uint CURSOR_SIZES[AMAZON_NUM_CURSORS] = { sizeof(MOUSE0), sizeof(MOUSE1), sizeof(MOUSE2), sizeof(MOUSE3), sizeof(CURSEYE), - sizeof(CURSHAND), sizeof(CURSGET), sizeof(CURSCLIMB), sizeof(CURSTALK), sizeof(CURSHELP) + sizeof(CURSHAND), sizeof(CURSGET), sizeof(CURSCLIMB), sizeof(CURSTALK), sizeof(CURSHELP) }; @@ -731,7 +731,7 @@ const int COMBO_TABLE[85][4] = { }; const char *const NO_HELP_MESSAGE_ENG = -"WE ARE UNABLE TO PROVIDE YOU WITH ANY MORE HINTS. YOUR IQ \ + "WE ARE UNABLE TO PROVIDE YOU WITH ANY MORE HINTS. YOUR IQ \ HAS DECREASED SO FAR THAT WE CAN NO LONGER PUT THE HINTS IN TERMS \ YOU CAN UNDERSTAND."; const char *const NO_HINTS_MESSAGE_ENG = "THE HELP SYSTEM HAS BEEN TURNED OFF FOR THIS GAME."; diff --git a/devtools/create_access/create_access_dat.cpp b/devtools/create_access/create_access_dat.cpp index af9ab026c0..a1591ef6e5 100644 --- a/devtools/create_access/create_access_dat.cpp +++ b/devtools/create_access/create_access_dat.cpp @@ -46,7 +46,7 @@ * Series of index entries identifying each game: * 1 byte - Game type: 1 = Amazon, 2 = Martian Memorandum, 3 = Noctropolis * 1 byte - disc type: 0 = Floppy, 1 = CD, 2 = Common data shared across - * all variations of the given game + * all variations of the given game * 1 byte - Is Demo: 0 = Full game, 1 = Demo * 1 byte - Language (Common::Language) * 4 bytes - File offset for the data for the game @@ -98,7 +98,7 @@ void writeHeader(int numExecutables) { // Write out version number outputFile.writeWord(VERSION_NUMBER); - + // Write out the number of entries the data file will contain outputFile.writeWord(numExecutables); @@ -109,8 +109,8 @@ void writeHeader(int numExecutables) { void writeAmazonCommonData() { // Write out the header entry outputFile.seek(8); - outputFile.writeByte(1); // Amazon - outputFile.writeByte(2); // Common data + outputFile.writeByte(1); // Amazon + outputFile.writeByte(2); // Common data outputFile.writeByte(0); outputFile.writeByte(0); outputFile.writeLong(outputFile.size()); @@ -144,8 +144,8 @@ void writeAmazonCommonData() { void writeMartianCommonData() { // Write out the header entry outputFile.seek(16); - outputFile.writeByte(2); // Martian - outputFile.writeByte(2); // Common data + outputFile.writeByte(2); // Martian + outputFile.writeByte(2); // Common data outputFile.writeByte(0); outputFile.writeByte(0); outputFile.writeLong(outputFile.size()); @@ -304,7 +304,7 @@ bool processExecutable(int exeIdx, const char *name) { for (uint idx = 0; idx < numFilenames; ++idx) { exeFile.seek(filenamesOffset + idx * 2); uint nameOffset = exeFile.readWord(); - + exeFile.seek(dataSegmentOffset + nameOffset); outputFile.writeString(exeFile); } @@ -319,7 +319,7 @@ bool processExecutable(int exeIdx, const char *name) { charOffsets.push_back(exeFile.readWord()); outputFile.writeWord(charOffsets.size()); - charOffsets.push_back(charsEnd); + charOffsets.push_back(charsEnd); for (uint idx = 0; idx < charOffsets.size() - 1; ++idx) { if (charOffsets[idx] == 0) { outputFile.writeWord(0); @@ -353,7 +353,7 @@ bool processExecutable(int exeIdx, const char *name) { travelPos.push_back(Common::Point(xp, yp)); } - outputFile.writeWord(numRooms); + outputFile.writeWord(numRooms); for (uint idx = 0; idx < numRooms; ++idx) { uint dataSize = 0; diff --git a/devtools/create_access/create_access_dat.h b/devtools/create_access/create_access_dat.h index 8b2af6b48b..4976edec46 100644 --- a/devtools/create_access/create_access_dat.h +++ b/devtools/create_access/create_access_dat.h @@ -166,11 +166,9 @@ public: uint32 result = pos(); fseek(_f, currentPos, SEEK_SET); return result; - } - else if (_memPtr) { + } else if (_memPtr) { return _size; - } - else { + } else { return 0; } } diff --git a/devtools/create_access/martian_resources.cpp b/devtools/create_access/martian_resources.cpp index f631ce7e31..381b79a073 100644 --- a/devtools/create_access/martian_resources.cpp +++ b/devtools/create_access/martian_resources.cpp @@ -118,8 +118,8 @@ const byte MOUSE3[] = { 0, 0 }; -const byte *const CURSORS[MARTIAN_NUM_CURSORS] = { - MOUSE0, MOUSE1, MOUSE2, MOUSE3 +const byte *const CURSORS[MARTIAN_NUM_CURSORS] = { + MOUSE0, MOUSE1, MOUSE2, MOUSE3 }; const uint CURSOR_SIZES[MARTIAN_NUM_CURSORS] = { sizeof(MOUSE0), sizeof(MOUSE1), sizeof(MOUSE2), sizeof(MOUSE3) -- cgit v1.2.3 From 355420c1e599e3b8f56116d4c7826c640f8cc8ac Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 12 Dec 2015 16:03:55 +0100 Subject: TONY: Add detection for Tony Tough Czech "not installed" --- engines/tony/detection_tables.h | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/engines/tony/detection_tables.h b/engines/tony/detection_tables.h index 28dcaac752..1bb91a862d 100644 --- a/engines/tony/detection_tables.h +++ b/engines/tony/detection_tables.h @@ -24,7 +24,7 @@ namespace Tony { static const TonyGameDescription gameDescriptions[] = { { - // Tony Tough English + // Tony Tough English not installed { "tony", 0, @@ -32,8 +32,6 @@ static const TonyGameDescription gameDescriptions[] = { // TODO: AdvancedDetector seems to have a problem where it thinks data1.cab is unrecognized. // Is it perhaps because the Agos engine also has detection entries for data1.cab? {"data1.cab", 0, "ce82907242166bfb594d97bdb68f96d2", 4350}, - /*{"roasted.mpr", 0, "06203dbbc85fdd1e6dc8fc211c1a6207", 135911071}, - {"roasted.mpc", 0, "57c4a3860cf899443c357e0078ea6f49", 366773},*/ AD_LISTEND }, Common::EN_ANY, @@ -43,6 +41,24 @@ static const TonyGameDescription gameDescriptions[] = { }, }, + { + // Tony Tough Czech not installed + { + "tony", + 0, + { + // TODO: AdvancedDetector seems to have a problem where it thinks data1.cab is unrecognized. + // Is it perhaps because the Agos engine also has detection entries for data1.cab? + {"data1.cab", 0, "c6d5dd8f0c1241a6e3f7861b7f27bf7b", 4350}, + AD_LISTEND + }, + Common::CZ_CZE, + Common::kPlatformWindows, + ADGF_NO_FLAGS, + GUIO1(GUIO_NONE) + }, + }, + { // Tony Tough English Demo { -- cgit v1.2.3 From 3232050dfc3283501b33881c762a5e9b188cf985 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Thu, 10 Dec 2015 16:11:23 +0100 Subject: OPENGL: Fix include guard name. --- backends/graphics/opengl/opengl-sys.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backends/graphics/opengl/opengl-sys.h b/backends/graphics/opengl/opengl-sys.h index a3524b28d2..4e21894380 100644 --- a/backends/graphics/opengl/opengl-sys.h +++ b/backends/graphics/opengl/opengl-sys.h @@ -20,8 +20,8 @@ * */ -#ifndef BACKENDS_GRAPHICS_OPENGL_OPENGL_H -#define BACKENDS_GRAPHICS_OPENGL_OPENGL_H +#ifndef BACKENDS_GRAPHICS_OPENGL_OPENGL_SYS_H +#define BACKENDS_GRAPHICS_OPENGL_OPENGL_SYS_H // The purpose of this header is to include the OpenGL headers in an uniform // fashion. A notable example for a non standard port is the Tizen port. -- cgit v1.2.3 From fe2ee9ecf5709d49279265f0e5d3b2d0a5688265 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Fri, 11 Dec 2015 19:23:41 +0100 Subject: OPENGL: Refactor screen refresh handling. Subclasses of OpenGLGraphicsManager are now supposed to supply a refreshScreen function which handles actual screen updating (for example, buffer swapping). --- backends/graphics/opengl/opengl-graphics.cpp | 2 ++ backends/graphics/opengl/opengl-graphics.h | 5 +++++ backends/graphics/openglsdl/openglsdl-graphics.cpp | 16 +++++++++------- backends/graphics/openglsdl/openglsdl-graphics.h | 2 ++ backends/platform/tizen/graphics.cpp | 5 ++++- backends/platform/tizen/graphics.h | 2 ++ 6 files changed, 24 insertions(+), 8 deletions(-) diff --git a/backends/graphics/opengl/opengl-graphics.cpp b/backends/graphics/opengl/opengl-graphics.cpp index 5821856c30..301813c23f 100644 --- a/backends/graphics/opengl/opengl-graphics.cpp +++ b/backends/graphics/opengl/opengl-graphics.cpp @@ -431,6 +431,8 @@ void OpenGLGraphicsManager::updateScreen() { GLCALL(glColor4f(1.0f, 1.0f, 1.0f, 1.0f)); } #endif + + refreshScreen(); } Graphics::Surface *OpenGLGraphicsManager::lockScreen() { diff --git a/backends/graphics/opengl/opengl-graphics.h b/backends/graphics/opengl/opengl-graphics.h index cec970e0cc..3634e145ce 100644 --- a/backends/graphics/opengl/opengl-graphics.h +++ b/backends/graphics/opengl/opengl-graphics.h @@ -262,6 +262,11 @@ protected: */ virtual bool loadVideoMode(uint requestedWidth, uint requestedHeight, const Graphics::PixelFormat &format) = 0; + /** + * Refresh the screen contents. + */ + virtual void refreshScreen() = 0; + /** * Save a screenshot of the full display as BMP to the given file. This * uses Common::DumpFile for writing the screenshot. diff --git a/backends/graphics/openglsdl/openglsdl-graphics.cpp b/backends/graphics/openglsdl/openglsdl-graphics.cpp index 42327197b7..892dfc6cd3 100644 --- a/backends/graphics/openglsdl/openglsdl-graphics.cpp +++ b/backends/graphics/openglsdl/openglsdl-graphics.cpp @@ -236,13 +236,6 @@ void OpenGLSdlGraphicsManager::updateScreen() { } OpenGLGraphicsManager::updateScreen(); - - // Swap OpenGL buffers -#if SDL_VERSION_ATLEAST(2, 0, 0) - SDL_GL_SwapWindow(_window->getSDLWindow()); -#else - SDL_GL_SwapBuffers(); -#endif } void OpenGLSdlGraphicsManager::notifyVideoExpose() { @@ -301,6 +294,15 @@ bool OpenGLSdlGraphicsManager::loadVideoMode(uint requestedWidth, uint requested return setupMode(requestedWidth, requestedHeight); } +void OpenGLSdlGraphicsManager::refreshScreen() { + // Swap OpenGL buffers +#if SDL_VERSION_ATLEAST(2, 0, 0) + SDL_GL_SwapWindow(_window->getSDLWindow()); +#else + SDL_GL_SwapBuffers(); +#endif +} + bool OpenGLSdlGraphicsManager::setupMode(uint width, uint height) { // In case we request a fullscreen mode we will use the mode the user // has chosen last time or the biggest mode available. diff --git a/backends/graphics/openglsdl/openglsdl-graphics.h b/backends/graphics/openglsdl/openglsdl-graphics.h index 845880eb14..1552593575 100644 --- a/backends/graphics/openglsdl/openglsdl-graphics.h +++ b/backends/graphics/openglsdl/openglsdl-graphics.h @@ -65,6 +65,8 @@ protected: virtual void setInternalMousePosition(int x, int y); virtual bool loadVideoMode(uint requestedWidth, uint requestedHeight, const Graphics::PixelFormat &format); + + virtual void refreshScreen(); private: bool setupMode(uint width, uint height); diff --git a/backends/platform/tizen/graphics.cpp b/backends/platform/tizen/graphics.cpp index 9b23e3fe78..759c4e519d 100644 --- a/backends/platform/tizen/graphics.cpp +++ b/backends/platform/tizen/graphics.cpp @@ -127,7 +127,6 @@ void TizenGraphicsManager::setReady() { void TizenGraphicsManager::updateScreen() { if (!_initState) { OpenGLGraphicsManager::updateScreen(); - eglSwapBuffers(_eglDisplay, _eglSurface); } } @@ -203,3 +202,7 @@ bool TizenGraphicsManager::loadVideoMode(uint requestedWidth, uint requestedHeig // using a fixed output size we do nothing like that here. return true; } + +void TizenGraphicsManager::refreshScreen() { + eglSwapBuffers(_eglDisplay, _eglSurface); +} diff --git a/backends/platform/tizen/graphics.h b/backends/platform/tizen/graphics.h index f1d4498650..1522d66bbe 100644 --- a/backends/platform/tizen/graphics.h +++ b/backends/platform/tizen/graphics.h @@ -61,6 +61,8 @@ protected: bool loadVideoMode(uint requestedWidth, uint requestedHeight, const Graphics::PixelFormat &format); + void refreshScreen(); + const Graphics::Font *getFontOSD(); private: -- cgit v1.2.3 From f65a8b26898db3bd870010fc3a0b0b71e50e16b7 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Fri, 11 Dec 2015 19:54:47 +0100 Subject: OPENGL: Only redraw screen when actual changes happened. --- backends/graphics/opengl/opengl-graphics.cpp | 35 ++++++++++++++++++++++++++-- backends/graphics/opengl/opengl-graphics.h | 9 +++++++ 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/backends/graphics/opengl/opengl-graphics.cpp b/backends/graphics/opengl/opengl-graphics.cpp index 301813c23f..05e24675fd 100644 --- a/backends/graphics/opengl/opengl-graphics.cpp +++ b/backends/graphics/opengl/opengl-graphics.cpp @@ -51,7 +51,8 @@ OpenGLGraphicsManager::OpenGLGraphicsManager() _overlayVisible(false), _cursor(nullptr), _cursorX(0), _cursorY(0), _cursorDisplayX(0),_cursorDisplayY(0), _cursorHotspotX(0), _cursorHotspotY(0), _cursorHotspotXScaled(0), _cursorHotspotYScaled(0), _cursorWidthScaled(0), _cursorHeightScaled(0), - _cursorKeyColor(0), _cursorVisible(false), _cursorDontScale(false), _cursorPaletteEnabled(false) + _cursorKeyColor(0), _cursorVisible(false), _cursorDontScale(false), _cursorPaletteEnabled(false), + _forceRedraw(false) #ifdef USE_OSD , _osdAlpha(0), _osdFadeStartTime(0), _osd(nullptr) #endif @@ -343,7 +344,10 @@ void OpenGLGraphicsManager::fillScreen(uint32 col) { } void OpenGLGraphicsManager::setShakePos(int shakeOffset) { - _gameScreenShakeOffset = shakeOffset; + if (_gameScreenShakeOffset != shakeOffset) { + _gameScreenShakeOffset = shakeOffset; + _forceRedraw = true; + } } void OpenGLGraphicsManager::updateScreen() { @@ -351,6 +355,16 @@ void OpenGLGraphicsManager::updateScreen() { return; } + // We only update the screen when there actually have been any changes. + if ( !_forceRedraw + && !_gameScreen->isDirty() + && !(_overlayVisible && _overlay->isDirty()) + && !(_cursorVisible && _cursor && _cursor->isDirty()) + && _osdAlpha == 0) { + return; + } + _forceRedraw = false; + // Clear the screen buffer. GLCALL(glClear(GL_COLOR_BUFFER_BIT)); @@ -467,6 +481,7 @@ int16 OpenGLGraphicsManager::getOverlayHeight() { void OpenGLGraphicsManager::showOverlay() { _overlayVisible = true; + _forceRedraw = true; // Update cursor position. setMousePosition(_cursorX, _cursorY); @@ -474,6 +489,7 @@ void OpenGLGraphicsManager::showOverlay() { void OpenGLGraphicsManager::hideOverlay() { _overlayVisible = false; + _forceRedraw = true; // Update cursor position. setMousePosition(_cursorX, _cursorY); @@ -505,6 +521,12 @@ void OpenGLGraphicsManager::grabOverlay(void *buf, int pitch) { } bool OpenGLGraphicsManager::showMouse(bool visible) { + // In case the mouse cursor visibility changed we need to redraw the whole + // screen even when nothing else changed. + if (_cursorVisible != visible) { + _forceRedraw = true; + } + bool last = _cursorVisible; _cursorVisible = visible; return last; @@ -940,6 +962,12 @@ void OpenGLGraphicsManager::adjustMousePosition(int16 &x, int16 &y) { } void OpenGLGraphicsManager::setMousePosition(int x, int y) { + // Whenever the mouse position changed we force a screen redraw to reflect + // changes properly. + if (_cursorX != x || _cursorY != y) { + _forceRedraw = true; + } + _cursorX = x; _cursorY = y; @@ -1100,6 +1128,9 @@ void OpenGLGraphicsManager::recalculateDisplayArea() { // Update the cursor position to adjust for new display area. setMousePosition(_cursorX, _cursorY); + + // Force a redraw to assure screen is properly redrawn. + _forceRedraw = true; } void OpenGLGraphicsManager::updateCursorPalette() { diff --git a/backends/graphics/opengl/opengl-graphics.h b/backends/graphics/opengl/opengl-graphics.h index 3634e145ce..e88c3ae243 100644 --- a/backends/graphics/opengl/opengl-graphics.h +++ b/backends/graphics/opengl/opengl-graphics.h @@ -469,6 +469,15 @@ private: */ byte _cursorPalette[3 * 256]; + // + // Misc + // + + /** + * Whether the screen contents shall be forced to redrawn. + */ + bool _forceRedraw; + /** * Draws a rectangle */ -- cgit v1.2.3 From 693834e8c6e9bf01925dc1731dad44d15f880be9 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Fri, 11 Dec 2015 21:22:42 +0100 Subject: OPENGL: Implement black borders using scissor test. --- backends/graphics/opengl/opengl-graphics.cpp | 90 +++++++++++++--------------- backends/graphics/opengl/opengl-graphics.h | 4 +- 2 files changed, 44 insertions(+), 50 deletions(-) diff --git a/backends/graphics/opengl/opengl-graphics.cpp b/backends/graphics/opengl/opengl-graphics.cpp index 05e24675fd..df74e110bb 100644 --- a/backends/graphics/opengl/opengl-graphics.cpp +++ b/backends/graphics/opengl/opengl-graphics.cpp @@ -52,7 +52,7 @@ OpenGLGraphicsManager::OpenGLGraphicsManager() _cursorX(0), _cursorY(0), _cursorDisplayX(0),_cursorDisplayY(0), _cursorHotspotX(0), _cursorHotspotY(0), _cursorHotspotXScaled(0), _cursorHotspotYScaled(0), _cursorWidthScaled(0), _cursorHeightScaled(0), _cursorKeyColor(0), _cursorVisible(false), _cursorDontScale(false), _cursorPaletteEnabled(false), - _forceRedraw(false) + _forceRedraw(false), _scissorOverride(3) #ifdef USE_OSD , _osdAlpha(0), _osdFadeStartTime(0), _osd(nullptr) #endif @@ -366,7 +366,19 @@ void OpenGLGraphicsManager::updateScreen() { _forceRedraw = false; // Clear the screen buffer. - GLCALL(glClear(GL_COLOR_BUFFER_BIT)); + if (_scissorOverride) { + // In certain cases we need to assure that the whole screen area is + // cleared. For example, when switching from overlay visible to + // invisible, we need to assure that all contents are cleared to + // properly remove all overlay contents. + GLCALL(glDisable(GL_SCISSOR_TEST)); + GLCALL(glClear(GL_COLOR_BUFFER_BIT)); + GLCALL(glEnable(GL_SCISSOR_TEST)); + + --_scissorOverride; + } else { + GLCALL(glClear(GL_COLOR_BUFFER_BIT)); + } const GLfloat shakeOffset = _gameScreenShakeOffset * (GLfloat)_displayHeight / _gameScreen->getHeight(); @@ -389,37 +401,8 @@ void OpenGLGraphicsManager::updateScreen() { _cursorWidthScaled, _cursorHeightScaled); } - // Fourth step: Draw black borders around the game screen when no overlay - // is visible. This makes sure that the mouse cursor etc. is only drawn - // in the actual game screen area in this case. - if (!_overlayVisible) { - GLCALL(glColor4f(0.0f, 0.0f, 0.0f, 1.0f)); - - GLCALL(glDisable(GL_TEXTURE_2D)); - GLCALL(glDisableClientState(GL_TEXTURE_COORD_ARRAY)); - - // Top border. - drawRect(0, 0, _outputScreenWidth, _displayY); - - // Left border. - drawRect(0, 0, _displayX, _outputScreenHeight); - - // Bottom border. - const int y = _displayY + _displayHeight; - drawRect(0, y, _outputScreenWidth, _outputScreenHeight - y); - - // Right border. - const int x = _displayX + _displayWidth; - drawRect(x, 0, _outputScreenWidth - x, _outputScreenHeight); - - GLCALL(glEnableClientState(GL_TEXTURE_COORD_ARRAY)); - GLCALL(glEnable(GL_TEXTURE_2D)); - - GLCALL(glColor4f(1.0f, 1.0f, 1.0f, 1.0f)); - } - #ifdef USE_OSD - // Fifth step: Draw the OSD. + // Fourth step: Draw the OSD. if (_osdAlpha > 0) { Common::StackLock lock(_osdMutex); @@ -483,6 +466,9 @@ void OpenGLGraphicsManager::showOverlay() { _overlayVisible = true; _forceRedraw = true; + // Allow drawing inside full screen area. + GLCALL(glDisable(GL_SCISSOR_TEST)); + // Update cursor position. setMousePosition(_cursorX, _cursorY); } @@ -491,6 +477,10 @@ void OpenGLGraphicsManager::hideOverlay() { _overlayVisible = false; _forceRedraw = true; + // Limit drawing to screen area. + GLCALL(glEnable(GL_SCISSOR_TEST)); + _scissorOverride = 3; + // Update cursor position. setMousePosition(_cursorX, _cursorY); } @@ -875,6 +865,16 @@ void OpenGLGraphicsManager::notifyContextCreate(const Graphics::PixelFormat &def GLCALL(glEnable(GL_TEXTURE_2D)); + // Setup scissor state accordingly. + if (_overlayVisible) { + GLCALL(glDisable(GL_SCISSOR_TEST)); + } else { + GLCALL(glEnable(GL_SCISSOR_TEST)); + } + // Clear the whole screen for the first three frames to assure any + // leftovers are cleared. + _scissorOverride = 3; + // We use a "pack" alignment (when reading from textures) to 4 here, // since the only place where we really use it is the BMP screenshot // code and that requires the same alignment too. @@ -1126,6 +1126,16 @@ void OpenGLGraphicsManager::recalculateDisplayArea() { _displayX = (_outputScreenWidth - _displayWidth ) / 2; _displayY = (_outputScreenHeight - _displayHeight) / 2; + // Setup drawing limitation for game graphics. + // This invovles some trickery because OpenGL's viewport coordinate system + // is upside down compared to ours. + GLCALL(glScissor(_displayX, + _outputScreenHeight - _displayHeight - _displayY, + _displayWidth, + _displayHeight)); + // Clear the whole screen for the first three frames to remove leftovers. + _scissorOverride = 3; + // Update the cursor position to adjust for new display area. setMousePosition(_cursorX, _cursorY); @@ -1248,20 +1258,4 @@ void OpenGLGraphicsManager::saveScreenshot(const Common::String &filename) const delete[] pixels; } -void OpenGLGraphicsManager::drawRect(GLfloat x, GLfloat y, GLfloat w, GLfloat h) { - if (w < 0 || h < 0) { - return; - } - - const GLfloat vertices[4*2] = { - x, y, - x + w, y, - x, y + h, - x + w, y + h - }; - GLCALL(glVertexPointer(2, GL_FLOAT, 0, vertices)); - - GLCALL(glDrawArrays(GL_TRIANGLE_STRIP, 0, 4)); -} - } // End of namespace OpenGL diff --git a/backends/graphics/opengl/opengl-graphics.h b/backends/graphics/opengl/opengl-graphics.h index e88c3ae243..9578839383 100644 --- a/backends/graphics/opengl/opengl-graphics.h +++ b/backends/graphics/opengl/opengl-graphics.h @@ -479,9 +479,9 @@ private: bool _forceRedraw; /** - * Draws a rectangle + * Number of frames glClear shall ignore scissor testing. */ - void drawRect(GLfloat x, GLfloat y, GLfloat w, GLfloat h); + uint _scissorOverride; #ifdef USE_OSD // -- cgit v1.2.3 From 77feb41a06ecbcee55ea857c14bb34cc5b13ff92 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 12 Dec 2015 20:53:42 -0500 Subject: ACCESS: Fix offering items to boat captain --- engines/access/inventory.cpp | 1 - engines/access/room.cpp | 4 +++- engines/access/screen.cpp | 4 +++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/engines/access/inventory.cpp b/engines/access/inventory.cpp index 0a962aa69a..6d1b6d8d0f 100644 --- a/engines/access/inventory.cpp +++ b/engines/access/inventory.cpp @@ -183,7 +183,6 @@ int InventoryManager::newDisplayInv() { _invModeFlag = false; events.debounceLeft(); _vm->_timers.restoreTimers(); - _vm->_startup = 1; int result = 0; if (!_invRefreshFlag) { diff --git a/engines/access/room.cpp b/engines/access/room.cpp index 9a6efd32fc..f54b6170bc 100644 --- a/engines/access/room.cpp +++ b/engines/access/room.cpp @@ -172,12 +172,14 @@ void Room::doRoom() { reloadFlag = false; _vm->_startup = 8; _function = FN_NONE; + bool fadeIn = true; while (!_vm->shouldQuit()) { _vm->_images.clear(); - if (_vm->_startup != -1 && --_vm->_startup == 0) { + if (_vm->_startup == -1 && !fadeIn) { _vm->_events->showCursor(); _vm->_screen->fadeIn(); + fadeIn = true; } // Poll for events diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index b46f31f65a..98e188c0ca 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -89,8 +89,10 @@ void Screen::setPanel(int num) { } void Screen::updateScreen() { - if (_vm->_startup > 0) + if (_vm->_startup >= 0) { + --_vm->_startup; return; + } // Merge the dirty rects mergeDirtyRects(); -- cgit v1.2.3 From 5ad7c53c76c1ac97ae5a434d3f7e04a3e1a625ff Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 12 Dec 2015 20:59:17 -0500 Subject: ACCESS: Fix cursor after selecting inventory item to offer NPC --- engines/access/scripts.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/engines/access/scripts.cpp b/engines/access/scripts.cpp index 25b8c97be5..bb2875013b 100644 --- a/engines/access/scripts.cpp +++ b/engines/access/scripts.cpp @@ -536,6 +536,7 @@ void Scripts::cmdDispInv_v1() { void Scripts::cmdDispInv_v2() { _vm->_inventory->newDisplayInv(); + _vm->_events->forceSetCursor(CURSOR_ARROW); } void Scripts::cmdSetAbout() { -- cgit v1.2.3 From cbc517f14f339cbf709797192e1d8d48ff2313de Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Sun, 13 Dec 2015 15:42:11 +0100 Subject: SDL: Fix warpMouse for SDL2. Thanks to bgK for noticing. --- .../graphics/surfacesdl/surfacesdl-graphics.cpp | 29 +++++++++++++--------- backends/graphics/surfacesdl/surfacesdl-graphics.h | 1 + 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/backends/graphics/surfacesdl/surfacesdl-graphics.cpp b/backends/graphics/surfacesdl/surfacesdl-graphics.cpp index e45773e5d7..7d666bdbfa 100644 --- a/backends/graphics/surfacesdl/surfacesdl-graphics.cpp +++ b/backends/graphics/surfacesdl/surfacesdl-graphics.cpp @@ -125,7 +125,7 @@ SurfaceSdlGraphicsManager::SurfaceSdlGraphicsManager(SdlEventSource *sdlEventSou _hwscreen(0), #if SDL_VERSION_ATLEAST(2, 0, 0) _renderer(nullptr), _screenTexture(nullptr), - _viewportX(0), _viewportY(0), _mouseScaleX(1.0f), _mouseScaleY(1.0f), + _viewportX(0), _viewportY(0), _renderScaleX(1.0f), _renderScaleY(1.0f), _mouseScaleX(1.0f), _mouseScaleY(1.0f), #else _originalBitsPerPixel(0), #endif @@ -1757,22 +1757,28 @@ void SurfaceSdlGraphicsManager::setMousePos(int x, int y) { } void SurfaceSdlGraphicsManager::warpMouse(int x, int y) { - int y1 = y; - // Don't change actual mouse position, when mouse is outside of our window (in case of windowed mode) if (!_window->hasMouseFocus()) { setMousePos(x, y); // but change game cursor position return; } + int x1 = x, y1 = y; if (_videoMode.aspectRatioCorrection && !_overlayVisible) - y1 = real2Aspect(y); + y1 = real2Aspect(y1); if (_mouseCurState.x != x || _mouseCurState.y != y) { - if (!_overlayVisible) - _window->warpMouseInWindow(x * _videoMode.scaleFactor, y1 * _videoMode.scaleFactor); - else - _window->warpMouseInWindow(x, y1); + if (!_overlayVisible) { + x1 *= _videoMode.scaleFactor; + y1 *= _videoMode.scaleFactor; + } + +#if SDL_VERSION_ATLEAST(2, 0, 0) + x1 = (int)((x1 + _viewportX) * _renderScaleX); + y1 = (int)((y1 + _viewportY) * _renderScaleY); +#endif + + _window->warpMouseInWindow(x1, y1); // SDL_WarpMouse() generates a mouse movement event, so // setMousePos() would be called eventually. However, the @@ -2414,13 +2420,12 @@ SDL_Surface *SurfaceSdlGraphicsManager::SDL_SetVideoMode(int width, int height, // obtain the actual window size and the internal renderer scaling. // Based on this we calculate scale factors to scale received mouse // coordinates into actual screen area coordinates. - float scaleX = 0, scaleY = 0; - SDL_RenderGetScale(_renderer, &scaleX, &scaleY); + SDL_RenderGetScale(_renderer, &_renderScaleX, &_renderScaleY); int windowWidth = 1, windowHeight = 1; SDL_GetWindowSize(_window->getSDLWindow(), &windowWidth, &windowHeight); - _mouseScaleX = (width * scaleX) / windowWidth; - _mouseScaleY = (height * scaleY) / windowHeight; + _mouseScaleX = (width * _renderScaleX) / windowWidth; + _mouseScaleY = (height * _renderScaleY) / windowHeight; // Obtain viewport top left coordinates to transform received coordinates // into visible area coordinates (i.e. including black borders). diff --git a/backends/graphics/surfacesdl/surfacesdl-graphics.h b/backends/graphics/surfacesdl/surfacesdl-graphics.h index 07ff4e5926..4d74ec575b 100644 --- a/backends/graphics/surfacesdl/surfacesdl-graphics.h +++ b/backends/graphics/surfacesdl/surfacesdl-graphics.h @@ -172,6 +172,7 @@ protected: SDL_Renderer *_renderer; SDL_Texture *_screenTexture; int _viewportX, _viewportY; + float _renderScaleX, _renderScaleY; float _mouseScaleX, _mouseScaleY; void deinitializeRenderer(); -- cgit v1.2.3 From f9085aca0699d2b70e5310efe0e94ef9b0a41c87 Mon Sep 17 00:00:00 2001 From: Martin Kiewitz Date: Sun, 13 Dec 2015 19:19:40 +0100 Subject: SCI: detection for Castle of Dr. Brain PC-9801 JP also known as Dr. Brain Puzzle no Shiro --- engines/sci/detection_tables.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/engines/sci/detection_tables.h b/engines/sci/detection_tables.h index 4482375d19..f6283bf77b 100644 --- a/engines/sci/detection_tables.h +++ b/engines/sci/detection_tables.h @@ -172,6 +172,16 @@ static const struct ADGameDescription SciGameDescriptions[] = { AD_LISTEND}, Common::ES_ESP, Common::kPlatformDOS, ADGF_ADDENGLISH, GUIO4(GUIO_NOSPEECH, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) }, + // Castle of Dr. Brain aka Dr. Brain Puzzle no Shiro - Japanese PC-98 Floppy (from m_kiewitz) + // includes both Japanese and English text + // Executable scanning reports "x.yyy.zzz", VERSION file reports "1.000" + {"castlebrain", "", { + {"resource.map", 0, "ff9674d5d0215a7ebae25ee38d5a72af", 2631}, + {"resource.000", 0, "27ec5fa09cd12a7fd16e86d96a2ed245", 548272}, + {"resource.001", 0, "7c3e82c390e934de9b7afcab6de9cec4", 1117317}, + AD_LISTEND}, + Common::JA_JPN, Common::kPlatformPC98, ADGF_ADDENGLISH, GUIO5(GUIO_NOSPEECH, GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) }, + #ifdef ENABLE_SCI32 // Inside the Chest / Behind the Developer's Shield // SCI interpreter version 2.000.000 -- cgit v1.2.3 From 942d0fdad46d2105f1606ddea8cd9146acec70d8 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Sun, 13 Dec 2015 19:05:18 +0100 Subject: OPENGL: Limit scissor override to invisible overlay. This fixes some corner cases which caused black bars to appear for a few screen updates when the overlay is visible. --- backends/graphics/opengl/opengl-graphics.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backends/graphics/opengl/opengl-graphics.cpp b/backends/graphics/opengl/opengl-graphics.cpp index df74e110bb..c80f57a40e 100644 --- a/backends/graphics/opengl/opengl-graphics.cpp +++ b/backends/graphics/opengl/opengl-graphics.cpp @@ -366,7 +366,7 @@ void OpenGLGraphicsManager::updateScreen() { _forceRedraw = false; // Clear the screen buffer. - if (_scissorOverride) { + if (_scissorOverride && !_overlayVisible) { // In certain cases we need to assure that the whole screen area is // cleared. For example, when switching from overlay visible to // invisible, we need to assure that all contents are cleared to -- cgit v1.2.3 From 5d48e211aa76a64c438457350a25f365cbdfdcd7 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Sun, 13 Dec 2015 20:20:23 +0100 Subject: SDL: Fix mouse emulation with SDL2. The mouse emulation via keyboard (or other means) was broken with 079037b73990b6107e59c7f1cd971c3a1cc221d1. --- .../graphics/surfacesdl/surfacesdl-graphics.cpp | 74 ++++++++++++---------- backends/graphics/surfacesdl/surfacesdl-graphics.h | 5 +- 2 files changed, 43 insertions(+), 36 deletions(-) diff --git a/backends/graphics/surfacesdl/surfacesdl-graphics.cpp b/backends/graphics/surfacesdl/surfacesdl-graphics.cpp index 7d666bdbfa..b2da47110b 100644 --- a/backends/graphics/surfacesdl/surfacesdl-graphics.cpp +++ b/backends/graphics/surfacesdl/surfacesdl-graphics.cpp @@ -32,6 +32,7 @@ #include "common/textconsole.h" #include "common/translation.h" #include "common/util.h" +#include "common/frac.h" #ifdef USE_RGB_COLOR #include "common/list.h" #endif @@ -125,7 +126,7 @@ SurfaceSdlGraphicsManager::SurfaceSdlGraphicsManager(SdlEventSource *sdlEventSou _hwscreen(0), #if SDL_VERSION_ATLEAST(2, 0, 0) _renderer(nullptr), _screenTexture(nullptr), - _viewportX(0), _viewportY(0), _renderScaleX(1.0f), _renderScaleY(1.0f), _mouseScaleX(1.0f), _mouseScaleY(1.0f), + _viewport(), _windowWidth(1), _windowHeight(1), #else _originalBitsPerPixel(0), #endif @@ -890,9 +891,14 @@ bool SurfaceSdlGraphicsManager::loadGFXMode() { SDL_SetColorKey(_osdSurface, SDL_RLEACCEL | SDL_SRCCOLORKEY | SDL_SRCALPHA, kOSDColorKey); #endif +#if !SDL_VERSION_ATLEAST(2, 0, 0) + // For SDL2 the output resolution might differ from the requested + // resolution. We handle resetting the keyboard emulation properly inside + // our SDL_SetVideoMode wrapper for SDL2. _eventSource->resetKeyboadEmulation( _videoMode.screenWidth * _videoMode.scaleFactor - 1, effectiveScreenHeight() - 1); +#endif // Distinguish 555 and 565 mode if (_hwscreen->format->Rmask == 0x7C00) @@ -1774,8 +1780,10 @@ void SurfaceSdlGraphicsManager::warpMouse(int x, int y) { } #if SDL_VERSION_ATLEAST(2, 0, 0) - x1 = (int)((x1 + _viewportX) * _renderScaleX); - y1 = (int)((y1 + _viewportY) * _renderScaleY); + // Transform our coordinates in "virtual" output coordinate space into + // actual output coordinate space. + x1 = x1 * _windowWidth / _videoMode.hardwareWidth; + y1 = y1 * _windowHeight / _videoMode.hardwareHeight; #endif _window->warpMouseInWindow(x1, y1); @@ -2361,13 +2369,13 @@ void SurfaceSdlGraphicsManager::notifyVideoExpose() { void SurfaceSdlGraphicsManager::transformMouseCoordinates(Common::Point &point) { #if SDL_VERSION_ATLEAST(2, 0, 0) - // In fullscreen mode we can easily get coordinates outside the actual - // screen area. For example, if black bars are added left/right we can end - // up with negative x coordinates if the user moves the mouse inside the - // black bar. Here, we post process the received cooridnates to give the - // user the feeling the black bars do not exist. - point.x = (int)((point.x + _viewportX) * _mouseScaleX); - point.y = (int)((point.y + _viewportY) * _mouseScaleY); + // In SDL2 the actual output resolution might be different from what we + // requested. Thus, we transform the coordinates from actual output + // coordinate space into the "virtual" output coordinate space. + // Please note that we ignore the possible existence of black bars here, + // this avoids the feeling of stickyness to black bars. + point.x = point.x * _videoMode.hardwareWidth / _windowWidth; + point.y = point.y * _videoMode.hardwareHeight / _windowHeight; #endif if (!_overlayVisible) { @@ -2408,31 +2416,31 @@ SDL_Surface *SurfaceSdlGraphicsManager::SDL_SetVideoMode(int width, int height, return nullptr; } - // We set the logical renderer size to the requested resolution in - // fullscreen. This assures that SDL2 adds black bars if needed to prevent - // stretching. - if (isFullscreen && SDL_RenderSetLogicalSize(_renderer, width, height) < 0) { - deinitializeRenderer(); - return nullptr; - } + SDL_GetWindowSize(_window->getSDLWindow(), &_windowWidth, &_windowHeight); + // We expect full screen resolution as inputs coming from the event system. + _eventSource->resetKeyboadEmulation(_windowWidth - 1, _windowHeight - 1); + + // Calculate the "viewport" for the actual area we draw in. In fullscreen + // we can easily get a different resolution than what we requested. In + // this case, we add black bars if necessary to assure the aspect ratio + // is preserved. + const frac_t outputAspect = intToFrac(_windowWidth) / _windowHeight; + const frac_t desiredAspect = intToFrac(width) / height; - // To provide smooth mouse handling in case black borders are added, we - // obtain the actual window size and the internal renderer scaling. - // Based on this we calculate scale factors to scale received mouse - // coordinates into actual screen area coordinates. - SDL_RenderGetScale(_renderer, &_renderScaleX, &_renderScaleY); - int windowWidth = 1, windowHeight = 1; - SDL_GetWindowSize(_window->getSDLWindow(), &windowWidth, &windowHeight); + _viewport.w = _windowWidth; + _viewport.h = _windowHeight; - _mouseScaleX = (width * _renderScaleX) / windowWidth; - _mouseScaleY = (height * _renderScaleY) / windowHeight; + // Adjust one dimension for mantaining the aspect ratio. + if (abs(outputAspect - desiredAspect) >= (int)(FRAC_ONE / 1000)) { + if (outputAspect < desiredAspect) { + _viewport.h = height * _windowWidth / width; + } else if (outputAspect > desiredAspect) { + _viewport.w = width * _windowHeight / height; + } + } - // Obtain viewport top left coordinates to transform received coordinates - // into visible area coordinates (i.e. including black borders). - SDL_Rect viewport; - SDL_RenderGetViewport(_renderer, &viewport); - _viewportX = viewport.x; - _viewportY = viewport.y; + _viewport.x = (_windowWidth - _viewport.w) / 2; + _viewport.y = (_windowHeight - _viewport.h) / 2; _screenTexture = SDL_CreateTexture(_renderer, SDL_PIXELFORMAT_RGB565, SDL_TEXTUREACCESS_STREAMING, width, height); if (!_screenTexture) { @@ -2453,7 +2461,7 @@ void SurfaceSdlGraphicsManager::SDL_UpdateRects(SDL_Surface *screen, int numrect SDL_UpdateTexture(_screenTexture, nullptr, screen->pixels, screen->pitch); SDL_RenderClear(_renderer); - SDL_RenderCopy(_renderer, _screenTexture, NULL, NULL); + SDL_RenderCopy(_renderer, _screenTexture, NULL, &_viewport); SDL_RenderPresent(_renderer); } #endif // SDL_VERSION_ATLEAST(2, 0, 0) diff --git a/backends/graphics/surfacesdl/surfacesdl-graphics.h b/backends/graphics/surfacesdl/surfacesdl-graphics.h index 4d74ec575b..ac9844c849 100644 --- a/backends/graphics/surfacesdl/surfacesdl-graphics.h +++ b/backends/graphics/surfacesdl/surfacesdl-graphics.h @@ -171,9 +171,8 @@ protected: * around this API to keep the code paths as close as possible. */ SDL_Renderer *_renderer; SDL_Texture *_screenTexture; - int _viewportX, _viewportY; - float _renderScaleX, _renderScaleY; - float _mouseScaleX, _mouseScaleY; + SDL_Rect _viewport; + int _windowWidth, _windowHeight; void deinitializeRenderer(); SDL_Surface *SDL_SetVideoMode(int width, int height, int bpp, Uint32 flags); -- cgit v1.2.3 From 1161e3e89d9c1d5aa72b184594d25411bc5ed472 Mon Sep 17 00:00:00 2001 From: Martin Kiewitz Date: Sun, 13 Dec 2015 22:56:42 +0100 Subject: SCI: add difference for SCI1 PC-98 word-wrapping fixes small issue in Castle of Dr. Brain PC-98 Japanese room 120, when looking at the table Also added a few comments to Japanese word wrapping code --- engines/sci/graphics/text16.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/engines/sci/graphics/text16.cpp b/engines/sci/graphics/text16.cpp index f463dff4b1..6ef616d3cb 100644 --- a/engines/sci/graphics/text16.cpp +++ b/engines/sci/graphics/text16.cpp @@ -144,12 +144,16 @@ int16 GfxText16::CodeProcessing(const char *&text, GuiResourceId orgFontId, int1 } // Has actually punctuation and characters in it, that may not be the first in a line +// Table from Quest for Glory 1 PC-98 static const uint16 text16_shiftJIS_punctuation[] = { 0x9F82, 0xA182, 0xA382, 0xA582, 0xA782, 0xC182, 0xE182, 0xE382, 0xE582, 0xEC82, 0x4083, 0x4283, 0x4483, 0x4683, 0x4883, 0x6283, 0x8383, 0x8583, 0x8783, 0x8E83, 0x9583, 0x9683, 0x5B81, 0x4181, 0x4281, 0x7681, 0x7881, 0x4981, 0x4881, 0 }; +// Police Quest 2 (SCI0) only checked for: 0x4181, 0x4281, 0x7681, 0x7881, 0x4981, 0x4881 +// Castle of Dr. Brain/King's Quest 5/Space Quest 4 (SCI1) only checked for: 0x4181, 0x4281, 0x7681, 0x7881 + // return max # of chars to fit maxwidth with full words, does not include // breaking space // Also adjusts text pointer to the new position for the caller @@ -201,9 +205,10 @@ int16 GfxText16::GetLongest(const char *&textPtr, int16 maxWidth, GuiResourceId } // it's meant to pass through here case 0xA: - case 0x9781: // this one is used by SQ4/japanese as line break as well + case 0x9781: // this one is used by SQ4/japanese as line break as well (was added for SCI1/PC98) curCharCount++; textPtr++; if (curChar > 0xFF) { + // skip another byte in case char is double-byte (PC-98) curCharCount++; textPtr++; } // and it's also meant to pass through here @@ -261,6 +266,7 @@ int16 GfxText16::GetLongest(const char *&textPtr, int16 maxWidth, GuiResourceId // But it also checked, if the current character is not inside a punctuation table and it even // went backwards in case it found multiple ones inside that table. + // Note: PQ2 PC-98 only went back 1 character and not multiple ones uint nonBreakingPos = 0; while (1) { @@ -285,6 +291,14 @@ int16 GfxText16::GetLongest(const char *&textPtr, int16 maxWidth, GuiResourceId error("Non double byte while seeking back"); curChar |= (*(const byte *)(textPtr + 1)) << 8; } + + if (curChar == 0x4081) { + // Skip over alphabetic double-byte space + // This was introduced for SCI1 + // Happens in Castle of Dr. Brain PC-98 in room 120, when looking inside the mirror + // (game mentions Mixed Up Fairy Tales and uses English letters for that) + textPtr += 2; + } } // We split the word in that case -- cgit v1.2.3 From 898773e12f7115e4f67b55c27fd87e2c796e598a Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Sun, 13 Dec 2015 23:47:52 +0100 Subject: OPENGLSDL: Set proper mouse emulation dimensions. Formerly we did not initialize the mouse emulation from SdlEventSource properly. Now hopefully joysticks etc. should work fine with the SDL OpenGL output too. --- backends/graphics/openglsdl/openglsdl-graphics.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/backends/graphics/openglsdl/openglsdl-graphics.cpp b/backends/graphics/openglsdl/openglsdl-graphics.cpp index 892dfc6cd3..0d140ee4d7 100644 --- a/backends/graphics/openglsdl/openglsdl-graphics.cpp +++ b/backends/graphics/openglsdl/openglsdl-graphics.cpp @@ -21,6 +21,7 @@ */ #include "backends/graphics/openglsdl/openglsdl-graphics.h" +#include "backends/events/sdl/sdl-events.h" #include "common/textconsole.h" #include "common/config-manager.h" @@ -244,6 +245,7 @@ void OpenGLSdlGraphicsManager::notifyVideoExpose() { void OpenGLSdlGraphicsManager::notifyResize(const uint width, const uint height) { #if SDL_VERSION_ATLEAST(2, 0, 0) setActualScreenSize(width, height); + _eventSource->resetKeyboadEmulation(width - 1, height - 1); #else if (!_ignoreResizeEvents && _hwScreen && !(_hwScreen->flags & SDL_FULLSCREEN)) { // We save that we handled a resize event here. We need to know this @@ -404,6 +406,7 @@ bool OpenGLSdlGraphicsManager::setupMode(uint width, uint height) { int actualWidth, actualHeight; getWindowDimensions(&actualWidth, &actualHeight); setActualScreenSize(actualWidth, actualHeight); + _eventSource->resetKeyboadEmulation(actualWidth - 1, actualHeight - 1); return true; #else // WORKAROUND: Working around infamous SDL bugs when switching @@ -449,6 +452,7 @@ bool OpenGLSdlGraphicsManager::setupMode(uint width, uint height) { if (_hwScreen) { notifyContextCreate(rgba8888, rgba8888); setActualScreenSize(_hwScreen->w, _hwScreen->h); + _eventSource->resetKeyboadEmulation(_hwScreen->w - 1, _hwScreen->h - 1); } // Ignore resize events (from SDL) for a few frames, if this isn't -- cgit v1.2.3 From 86db21467edd666e037a76bf735eccd9e7977d8a Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Sun, 13 Dec 2015 23:51:20 +0100 Subject: SDL: Slight formatting fixes. --- backends/events/sdl/sdl-events.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/backends/events/sdl/sdl-events.cpp b/backends/events/sdl/sdl-events.cpp index 1e5119dbec..038f61664f 100644 --- a/backends/events/sdl/sdl-events.cpp +++ b/backends/events/sdl/sdl-events.cpp @@ -737,16 +737,16 @@ bool SdlEventSource::handleJoyButtonUp(SDL_Event &ev, Common::Event &event) { bool SdlEventSource::handleJoyAxisMotion(SDL_Event &ev, Common::Event &event) { int axis = ev.jaxis.value; - if ( axis > JOY_DEADZONE) { + if (axis > JOY_DEADZONE) { axis -= JOY_DEADZONE; event.type = Common::EVENT_MOUSEMOVE; - } else if ( axis < -JOY_DEADZONE ) { + } else if (axis < -JOY_DEADZONE) { axis += JOY_DEADZONE; event.type = Common::EVENT_MOUSEMOVE; } else axis = 0; - if ( ev.jaxis.axis == JOY_XAXIS) { + if (ev.jaxis.axis == JOY_XAXIS) { #ifdef JOY_ANALOG _km.x_vel = axis / 2000; _km.x_down_count = 0; @@ -759,7 +759,6 @@ bool SdlEventSource::handleJoyAxisMotion(SDL_Event &ev, Common::Event &event) { _km.x_down_count = 0; } #endif - } else if (ev.jaxis.axis == JOY_YAXIS) { #ifndef JOY_INVERT_Y axis = -axis; -- cgit v1.2.3 From 431d33b119301b8dc2fc71fa42b9c53a04c32d1b Mon Sep 17 00:00:00 2001 From: Martin Kiewitz Date: Mon, 14 Dec 2015 00:20:56 +0100 Subject: SCI: use diff. PC98 word wrap tables for SCI0/01/1 also added even more comments about details of word wrapping SCI0 (PQ2) and SCI1 (Brain/KQ5/SQ4) got their own table now --- engines/sci/graphics/text16.cpp | 42 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/engines/sci/graphics/text16.cpp b/engines/sci/graphics/text16.cpp index 6ef616d3cb..89c9be59f0 100644 --- a/engines/sci/graphics/text16.cpp +++ b/engines/sci/graphics/text16.cpp @@ -144,8 +144,14 @@ int16 GfxText16::CodeProcessing(const char *&text, GuiResourceId orgFontId, int1 } // Has actually punctuation and characters in it, that may not be the first in a line -// Table from Quest for Glory 1 PC-98 +// SCI1 didn't check for exclamation nor question marks, us checking for those too shouldn't be bad static const uint16 text16_shiftJIS_punctuation[] = { + 0x4181, 0x4281, 0x7681, 0x7881, 0x4981, 0x4881, 0 +}; + +// Table from Quest for Glory 1 PC-98 (SCI01) +// has pronunciation and small combining form characters on top (details right after this table) +static const uint16 text16_shiftJIS_punctuation_SCI01[] = { 0x9F82, 0xA182, 0xA382, 0xA582, 0xA782, 0xC182, 0xE182, 0xE382, 0xE582, 0xEC82, 0x4083, 0x4283, 0x4483, 0x4683, 0x4883, 0x6283, 0x8383, 0x8583, 0x8783, 0x8E83, 0x9583, 0x9683, 0x5B81, 0x4181, 0x4281, 0x7681, 0x7881, 0x4981, 0x4881, 0 @@ -154,6 +160,25 @@ static const uint16 text16_shiftJIS_punctuation[] = { // Police Quest 2 (SCI0) only checked for: 0x4181, 0x4281, 0x7681, 0x7881, 0x4981, 0x4881 // Castle of Dr. Brain/King's Quest 5/Space Quest 4 (SCI1) only checked for: 0x4181, 0x4281, 0x7681, 0x7881 +// SCI0/SCI01/SCI1: +// 0x4181 -> comma, 0x4281 -> period / full stop +// 0x7681 -> ending quotation mark, 0x7881 -> secondary quotation mark + +// SCI0/SCI01: +// 0x4981 -> exclamation mark, 0x4881 -> question mark + +// SCI01 (Quest for Glory only): +// 0x9F82, 0xA182, 0xA382, 0xA582, 0xA782 -> specifies vowel part of prev. hiragana char or pronunciation/extension of vowel +// 0xC182 -> pronunciation +// 0xE182, 0xE382, 0xE582, 0xEC82 -> small combining form of hiragana +// 0x4083, 0x4283, 0x4483, 0x4683, 0x4883 -> small combining form of katagana +// 0x6283 -> glottal stop / sokuon +// 0x8383, 0x8583 0x8783, 0x8E83 -> small combining form of katagana +// 0x9583 -> combining form +// 0x9683 -> abbreviation for the kanji (ka), the counter for months, places or provisions +// 0x5b81 -> low line / underscore (full width) + + // return max # of chars to fit maxwidth with full words, does not include // breaking space // Also adjusts text pointer to the new position for the caller @@ -269,15 +294,24 @@ int16 GfxText16::GetLongest(const char *&textPtr, int16 maxWidth, GuiResourceId // Note: PQ2 PC-98 only went back 1 character and not multiple ones uint nonBreakingPos = 0; + const uint16 *punctuationTable; + + if (getSciVersion() != SCI_VERSION_01) { + punctuationTable = text16_shiftJIS_punctuation; + } else { + // Quest for Glory 1 PC-98 only + punctuationTable = text16_shiftJIS_punctuation_SCI01; + } + while (1) { // Look up if character shouldn't be the first on a new line nonBreakingPos = 0; - while (text16_shiftJIS_punctuation[nonBreakingPos]) { - if (text16_shiftJIS_punctuation[nonBreakingPos] == curChar) + while (punctuationTable[nonBreakingPos]) { + if (punctuationTable[nonBreakingPos] == curChar) break; nonBreakingPos++; } - if (!text16_shiftJIS_punctuation[nonBreakingPos]) { + if (!punctuationTable[nonBreakingPos]) { // character is fine break; } -- cgit v1.2.3 From f2926412fe7966bc34ceea1f87f2a4dae51df2eb Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Mon, 14 Dec 2015 02:14:13 +0100 Subject: GRAPHICS: Fix fast ALPHA_BINARY blitting with TransparentSurface. This is a regression from 5d0f38d747e7583d0ca5959cd642468ba67cd04c and caused color glitches in Wintermute. --- graphics/transparent_surface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/graphics/transparent_surface.cpp b/graphics/transparent_surface.cpp index 992a5dc879..19e7655a93 100644 --- a/graphics/transparent_surface.cpp +++ b/graphics/transparent_surface.cpp @@ -116,7 +116,7 @@ void doBlitBinaryFast(byte *ino, byte *outo, uint32 width, uint32 height, uint32 in = ino; for (uint32 j = 0; j < width; j++) { uint32 pix = *(uint32 *)in; - int a = (pix >> kAModShift) & 0xff; + int a = in[kAIndex]; if (a != 0) { // Full opacity (Any value not exactly 0 is Opaque here) *(uint32 *)out = pix; -- cgit v1.2.3 From f7683083e2f47d9608f7ef3c4babfa56cb55bae0 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Mon, 14 Dec 2015 02:26:11 +0100 Subject: GRAPHICS: Use tabs for indentation. --- graphics/transparent_surface.h | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/graphics/transparent_surface.h b/graphics/transparent_surface.h index efb28149a5..4a23522aab 100644 --- a/graphics/transparent_surface.h +++ b/graphics/transparent_surface.h @@ -50,22 +50,22 @@ namespace Graphics { @brief The possible flipping parameters for the blit method. */ enum FLIP_FLAGS { - /// The image will not be flipped. - FLIP_NONE = 0, - /// The image will be flipped at the horizontal axis. - FLIP_H = 1, - /// The image will be flipped at the vertical axis. - FLIP_V = 2, - /// The image will be flipped at the horizontal and vertical axis. - FLIP_HV = FLIP_H | FLIP_V, - /// The image will be flipped at the horizontal and vertical axis. - FLIP_VH = FLIP_H | FLIP_V + /// The image will not be flipped. + FLIP_NONE = 0, + /// The image will be flipped at the horizontal axis. + FLIP_H = 1, + /// The image will be flipped at the vertical axis. + FLIP_V = 2, + /// The image will be flipped at the horizontal and vertical axis. + FLIP_HV = FLIP_H | FLIP_V, + /// The image will be flipped at the horizontal and vertical axis. + FLIP_VH = FLIP_H | FLIP_V }; enum AlphaType { - ALPHA_OPAQUE = 0, - ALPHA_BINARY = 1, - ALPHA_FULL = 2 + ALPHA_OPAQUE = 0, + ALPHA_BINARY = 1, + ALPHA_FULL = 2 }; /** -- cgit v1.2.3 From 74321fcd22e6bb6598abfefc9a52de87a422ee7a Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Mon, 14 Dec 2015 03:50:45 +0100 Subject: SWORD25: Let ImgLoader write into Graphics::Surface. --- engines/sword25/gfx/image/imgloader.cpp | 29 +++++++++++++---------------- engines/sword25/gfx/image/imgloader.h | 19 ++++++++----------- engines/sword25/gfx/image/renderedimage.cpp | 13 ++----------- engines/sword25/gfx/image/swimage.cpp | 19 ++++++------------- engines/sword25/gfx/image/swimage.h | 9 +++------ 5 files changed, 32 insertions(+), 57 deletions(-) diff --git a/engines/sword25/gfx/image/imgloader.cpp b/engines/sword25/gfx/image/imgloader.cpp index f299cee9d1..6ec0e7c542 100644 --- a/engines/sword25/gfx/image/imgloader.cpp +++ b/engines/sword25/gfx/image/imgloader.cpp @@ -33,11 +33,13 @@ #include "sword25/gfx/image/image.h" #include "sword25/gfx/image/imgloader.h" #include "graphics/pixelformat.h" +#include "graphics/surface.h" #include "image/png.h" namespace Sword25 { -bool ImgLoader::decodePNGImage(const byte *fileDataPtr, uint fileSize, byte *&uncompressedDataPtr, int &width, int &height, int &pitch) { +bool ImgLoader::decodePNGImage(const byte *fileDataPtr, uint fileSize, Graphics::Surface *dest) { + assert(dest); Common::MemoryReadStream *fileStr = new Common::MemoryReadStream(fileDataPtr, fileSize, DisposeAfterUse::NO); ::Image::PNGDecoder png; @@ -47,12 +49,9 @@ bool ImgLoader::decodePNGImage(const byte *fileDataPtr, uint fileSize, byte *&un const Graphics::Surface *sourceSurface = png.getSurface(); Graphics::Surface *pngSurface = sourceSurface->convertTo(Graphics::PixelFormat(4, 8, 8, 8, 8, 24, 16, 8, 0), png.getPalette()); - width = pngSurface->w; - height = pngSurface->h; - uncompressedDataPtr = new byte[pngSurface->pitch * pngSurface->h]; - memcpy(uncompressedDataPtr, (byte *)pngSurface->getPixels(), pngSurface->pitch * pngSurface->h); - pngSurface->free(); + dest->copyFrom(*pngSurface); + pngSurface->free(); delete pngSurface; delete fileStr; @@ -60,24 +59,22 @@ bool ImgLoader::decodePNGImage(const byte *fileDataPtr, uint fileSize, byte *&un return true; } -bool ImgLoader::decodeThumbnailImage(const byte *pFileData, uint fileSize, byte *&pUncompressedData, int &width, int &height, int &pitch) { +bool ImgLoader::decodeThumbnailImage(const byte *pFileData, uint fileSize, Graphics::Surface *dest) { + assert(dest); const byte *src = pFileData + 4; // skip header - width = READ_LE_UINT16(src); src += 2; - height = READ_LE_UINT16(src); src += 2; + uint width = READ_LE_UINT16(src); src += 2; + uint height = READ_LE_UINT16(src); src += 2; src++; // version, ignored for now - pitch = width * 4; - uint32 totalSize = pitch * height; - pUncompressedData = new byte[totalSize]; - uint32 *dst = (uint32 *)pUncompressedData; // treat as uint32, for pixelformat output - const Graphics::PixelFormat format = Graphics::PixelFormat(4, 8, 8, 8, 8, 24, 16, 8, 0); + dest->create(width, height, Graphics::PixelFormat(4, 8, 8, 8, 8, 24, 16, 8, 0)); + uint32 *dst = (uint32 *)dest->getBasePtr(0, 0); // treat as uint32, for pixelformat output byte r, g, b; - for (uint32 i = 0; i < totalSize / 4; i++) { + for (uint32 i = 0; i < width * height; i++) { r = *src++; g = *src++; b = *src++; - *dst++ = format.RGBToColor(r, g, b); + *dst++ = dest->format.RGBToColor(r, g, b); } return true; diff --git a/engines/sword25/gfx/image/imgloader.h b/engines/sword25/gfx/image/imgloader.h index b932cdc903..d9cf3f4d6d 100644 --- a/engines/sword25/gfx/image/imgloader.h +++ b/engines/sword25/gfx/image/imgloader.h @@ -35,6 +35,10 @@ #include "sword25/kernel/common.h" #include "sword25/gfx/graphicengine.h" +namespace Graphics { +struct Surface; +} // End of namespace Graphics + namespace Sword25 { /** @@ -52,25 +56,18 @@ public: * Decode an image. * @param[in] fileDatePtr pointer to the image data * @param[in] fileSize size of the image data in bytes - * @param[out] pUncompressedData if successful, this is set to a pointer containing the decoded image data - * @param[out] width if successful, this is set to the width of the image - * @param[out] height if successful, this is set to the height of the image - * @param[out] pitch if successful, this is set to the number of bytes per scanline in the image + * @param[out] dest if successful, surface will contain the image + * data (storage is allocated via create). * @return false in case of an error * - * @remark The size of the output data equals pitch * height. * @remark This function does not free the image buffer passed to it, * it is the callers responsibility to do so. */ static bool decodePNGImage(const byte *pFileData, uint fileSize, - byte *&pUncompressedData, - int &width, int &height, - int &pitch); + Graphics::Surface *dest); static bool decodeThumbnailImage(const byte *pFileData, uint fileSize, - byte *&pUncompressedData, - int &width, int &height, - int &pitch); + Graphics::Surface *dest); }; } // End of namespace Sword25 diff --git a/engines/sword25/gfx/image/renderedimage.cpp b/engines/sword25/gfx/image/renderedimage.cpp index 8c6369a790..0225787fde 100644 --- a/engines/sword25/gfx/image/renderedimage.cpp +++ b/engines/sword25/gfx/image/renderedimage.cpp @@ -126,19 +126,10 @@ RenderedImage::RenderedImage(const Common::String &filename, bool &result) : } // Uncompress the image - int pitch; - byte *dst; - int w, h; if (isPNG) - result = ImgLoader::decodePNGImage(pFileData, fileSize, dst, w, h, pitch); + result = ImgLoader::decodePNGImage(pFileData, fileSize, &_surface); else - result = ImgLoader::decodeThumbnailImage(pFileData, fileSize, dst, w, h, pitch); - - _surface.w = w; - _surface.h = h; - _surface.pitch = w * 4; - _surface.setPixels(dst); - _surface.format = Graphics::PixelFormat(4, 8, 8, 8, 8, 24, 16, 8, 0); + result = ImgLoader::decodeThumbnailImage(pFileData, fileSize, &_surface); if (!result) { error("Could not decode image."); diff --git a/engines/sword25/gfx/image/swimage.cpp b/engines/sword25/gfx/image/swimage.cpp index 776f8ce8d3..7a3c95b5f9 100644 --- a/engines/sword25/gfx/image/swimage.cpp +++ b/engines/sword25/gfx/image/swimage.cpp @@ -35,10 +35,7 @@ namespace Sword25 { -SWImage::SWImage(const Common::String &filename, bool &result) : - _imageDataPtr(0), - _width(0), - _height(0) { +SWImage::SWImage(const Common::String &filename, bool &result) : _image() { result = false; PackageManager *pPackage = Kernel::getInstance()->getPackage(); @@ -54,9 +51,7 @@ SWImage::SWImage(const Common::String &filename, bool &result) : } // Uncompress the image - int pitch; - byte *pUncompressedData; - if (!ImgLoader::decodePNGImage(pFileData, fileSize, pUncompressedData, _width, _height, pitch)) { + if (!ImgLoader::decodePNGImage(pFileData, fileSize, &_image)) { error("Could not decode image."); return; } @@ -64,14 +59,12 @@ SWImage::SWImage(const Common::String &filename, bool &result) : // Cleanup FileData delete[] pFileData; - _imageDataPtr = (uint *)pUncompressedData; - result = true; return; } SWImage::~SWImage() { - delete[] _imageDataPtr; + _image.free(); } @@ -96,10 +89,10 @@ bool SWImage::setContent(const byte *pixeldata, uint size, uint offset, uint str } uint SWImage::getPixel(int x, int y) { - assert(x >= 0 && x < _width); - assert(y >= 0 && y < _height); + assert(x >= 0 && x < _image.w); + assert(y >= 0 && y < _image.h); - return _imageDataPtr[_width * y + x]; + return *((const uint32 *)_image.getBasePtr(0, 0)); } } // End of namespace Sword25 diff --git a/engines/sword25/gfx/image/swimage.h b/engines/sword25/gfx/image/swimage.h index 60978eb6cc..97c6395278 100644 --- a/engines/sword25/gfx/image/swimage.h +++ b/engines/sword25/gfx/image/swimage.h @@ -45,10 +45,10 @@ public: virtual ~SWImage(); virtual int getWidth() const { - return _width; + return _image.w; } virtual int getHeight() const { - return _height; + return _image.h; } virtual GraphicEngine::COLOR_FORMATS getColorFormat() const { return GraphicEngine::CF_ARGB32; @@ -86,10 +86,7 @@ public: return false; } private: - uint *_imageDataPtr; - - int _width; - int _height; + Graphics::Surface _image; }; } // End of namespace Sword25 -- cgit v1.2.3 From 184ae49302792a924856ae051f1a96078f0723a1 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Mon, 14 Dec 2015 04:24:32 +0100 Subject: SWORD25: Plug memory leak in RenderedImage. --- engines/sword25/gfx/image/renderedimage.cpp | 3 +++ engines/sword25/gfx/image/renderedimage.h | 3 +++ 2 files changed, 6 insertions(+) diff --git a/engines/sword25/gfx/image/renderedimage.cpp b/engines/sword25/gfx/image/renderedimage.cpp index 0225787fde..8d90d1fa8b 100644 --- a/engines/sword25/gfx/image/renderedimage.cpp +++ b/engines/sword25/gfx/image/renderedimage.cpp @@ -178,6 +178,9 @@ RenderedImage::RenderedImage() : _isTransparent(true) { // ----------------------------------------------------------------------------- RenderedImage::~RenderedImage() { + if (_doCleanup) { + _surface.free(); + } } // ----------------------------------------------------------------------------- diff --git a/engines/sword25/gfx/image/renderedimage.h b/engines/sword25/gfx/image/renderedimage.h index 5b65a27355..e4d573f369 100644 --- a/engines/sword25/gfx/image/renderedimage.h +++ b/engines/sword25/gfx/image/renderedimage.h @@ -44,6 +44,9 @@ namespace Sword25 { class RenderedImage : public Image { +private: + RenderedImage(const RenderedImage &) : _doCleanup(false) {} + RenderedImage &operator=(const RenderedImage &) { return *this; } public: RenderedImage(const Common::String &filename, bool &result); -- cgit v1.2.3 From cb8e611e3373d8a87c931855916cf079eaad55dc Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Mon, 14 Dec 2015 04:35:50 +0100 Subject: SWORD25: Fix uninitialized variable usage. When using the constructor of Panel which directly calls unpersist _color was uninitialized. However, unpersit uses setColor which assumes _color is initialized properly. Caused valgrind warnings when loading. --- engines/sword25/gfx/panel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engines/sword25/gfx/panel.cpp b/engines/sword25/gfx/panel.cpp index 9699db7f6a..2b71854060 100644 --- a/engines/sword25/gfx/panel.cpp +++ b/engines/sword25/gfx/panel.cpp @@ -62,7 +62,7 @@ Panel::Panel(RenderObjectPtr parentPtr, int width, int height, uin } Panel::Panel(InputPersistenceBlock &reader, RenderObjectPtr parentPtr, uint handle) : - RenderObject(parentPtr, RenderObject::TYPE_PANEL, handle) { + RenderObject(parentPtr, RenderObject::TYPE_PANEL, handle), _color(0) { _initSuccess = unpersist(reader); } -- cgit v1.2.3 From 40421f1854a157703c3c8faddc1b622c39ecce4c Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Mon, 14 Dec 2015 04:49:36 +0100 Subject: SWORD25: Cleanup. --- engines/sword25/gfx/image/vectorimage.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/engines/sword25/gfx/image/vectorimage.cpp b/engines/sword25/gfx/image/vectorimage.cpp index 756d063d43..a678fdccad 100644 --- a/engines/sword25/gfx/image/vectorimage.cpp +++ b/engines/sword25/gfx/image/vectorimage.cpp @@ -311,8 +311,7 @@ VectorImage::~VectorImage() { if (_elements[j].getPathInfo(i).getVec()) free(_elements[j].getPathInfo(i).getVec()); - if (_pixelData) - free(_pixelData); + free(_pixelData); } -- cgit v1.2.3 From 69220505b6109227984f0d5de97180e989d1adce Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Mon, 14 Dec 2015 05:14:09 +0100 Subject: GRAPHICS: Add function to query TransparentSurface's builtin PixelFormat. --- graphics/transparent_surface.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/graphics/transparent_surface.h b/graphics/transparent_surface.h index 4a23522aab..0cd7d5b2e9 100644 --- a/graphics/transparent_surface.h +++ b/graphics/transparent_surface.h @@ -75,6 +75,18 @@ struct TransparentSurface : public Graphics::Surface { TransparentSurface(); TransparentSurface(const Graphics::Surface &surf, bool copyData = false); + /** + * Returns the pixel format all operations of TransparentSurface support. + * + * Unlike Surface TransparentSurface only works with a fixed pixel format. + * This format can be queried using this static function. + * + * @return Supported pixel format. + */ + static PixelFormat getSupportedPixelFormat() { + return PixelFormat(4, 8, 8, 8, 8, 24, 16, 8, 0); + } + void setColorKey(char r, char g, char b); void disableColorKey(); -- cgit v1.2.3 From 6dabb5c414de8931c989a8fe5b0ac3eef3b67ac0 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Mon, 14 Dec 2015 05:14:48 +0100 Subject: SWORD25: Call requested pixel format by its correct name. --- engines/sword25/sword25.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engines/sword25/sword25.cpp b/engines/sword25/sword25.cpp index 76142c2534..5223481d50 100644 --- a/engines/sword25/sword25.cpp +++ b/engines/sword25/sword25.cpp @@ -95,7 +95,7 @@ Common::Error Sword25Engine::run() { } Common::Error Sword25Engine::appStart() { - // Initialize the graphics mode to ARGB8888 + // Initialize the graphics mode to RGBA8888 Graphics::PixelFormat format = Graphics::PixelFormat(4, 8, 8, 8, 8, 24, 16, 8, 0); initGraphics(800, 600, true, &format); if (format != g_system->getScreenFormat()) -- cgit v1.2.3 From 35244a8643b53fdf753b4650c5cd0f1ad3829b9b Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Mon, 14 Dec 2015 05:23:16 +0100 Subject: SWORD25: Make #include follow our conventions. --- engines/sword25/gfx/image/vectorimagerenderer.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/engines/sword25/gfx/image/vectorimagerenderer.cpp b/engines/sword25/gfx/image/vectorimagerenderer.cpp index c69cb497c1..be734c7b98 100644 --- a/engines/sword25/gfx/image/vectorimagerenderer.cpp +++ b/engines/sword25/gfx/image/vectorimagerenderer.cpp @@ -38,8 +38,7 @@ * */ -#include "art.h" - +#include "sword25/gfx/image/art.h" #include "sword25/gfx/image/vectorimage.h" #include "graphics/colormasks.h" -- cgit v1.2.3 From 862e4302a71ed55e157bb2c46664d71eb9563899 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Mon, 14 Dec 2015 17:15:18 +0100 Subject: WIN32: Fix building for (some) MinGW64 toolchains. --- backends/taskbar/win32/win32-taskbar.cpp | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/backends/taskbar/win32/win32-taskbar.cpp b/backends/taskbar/win32/win32-taskbar.cpp index d45253c676..0192b1dc03 100644 --- a/backends/taskbar/win32/win32-taskbar.cpp +++ b/backends/taskbar/win32/win32-taskbar.cpp @@ -32,6 +32,21 @@ #if defined(__GNUC__) && defined(__MINGW32__) && !defined(__MINGW64__) #include "backends/taskbar/win32/mingw-compat.h" #else + // We use functionality introduced with Win7 in this file. + // To assure that including the respective system headers gives us all + // required definitions we set Win7 as minimum version we target. + // See: https://msdn.microsoft.com/en-us/library/windows/desktop/aa383745%28v=vs.85%29.aspx#macros_for_conditional_declarations + #undef _WIN32_WINNT + #define _WIN32_WINNT _WIN32_WINNT_WIN7 + + // TODO: We might not need to include this file, the MSDN docs are + // not really helpful to decide whether we require it or not. + // + // Casing of the name is a bit of a mess. MinGW64 seems to use all + // lowercase, while MSDN docs suggest "SdkDdkVer.h". We are stuck with + // what MinGW64 uses... + #include + // We need certain functions that are excluded by default #undef NONLS #undef NOICONS @@ -39,11 +54,6 @@ #if defined(ARRAYSIZE) #undef ARRAYSIZE #endif - - #if defined(_MSC_VER) - // Default MSVC headers for ITaskbarList3 and IShellLink - #include - #endif #endif #include -- cgit v1.2.3 From 8dd9d44b1ff4bd531f7668973206be2fb372fdde Mon Sep 17 00:00:00 2001 From: Bastien Bouclet Date: Mon, 14 Dec 2015 20:23:57 +0100 Subject: MOHAWK: Fix loading the Myst cabin gauge movie --- engines/mohawk/myst_stacks/myst.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/engines/mohawk/myst_stacks/myst.cpp b/engines/mohawk/myst_stacks/myst.cpp index 98f0aa5349..9ad1635757 100644 --- a/engines/mohawk/myst_stacks/myst.cpp +++ b/engines/mohawk/myst_stacks/myst.cpp @@ -3683,16 +3683,16 @@ void Myst::boilerFireUpdate(bool init) { void Myst::boilerGaugeInit() { if (_vm->getCurCard() == 4098) { _cabinGaugeMovie = _vm->_video->playMovie(_vm->wrapMovieFilename("cabingau", kMystStack)); - if (!_cabinFireMovie) + if (!_cabinGaugeMovie) error("Failed to open cabingau movie"); - _cabinFireMovie->moveTo(243, 96); + _cabinGaugeMovie->moveTo(243, 96); } else { _cabinGaugeMovie = _vm->_video->playMovie(_vm->wrapMovieFilename("cabcgfar", kMystStack)); - if (!_cabinFireMovie) + if (!_cabinGaugeMovie) error("Failed to open cabcgfar movie"); - _cabinFireMovie->moveTo(254, 136); + _cabinGaugeMovie->moveTo(254, 136); } Audio::Timestamp frame; -- cgit v1.2.3 From 64f9c902ddf0c8294fd9e5f66cf96661eb12040b Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Mon, 14 Dec 2015 20:09:29 +0100 Subject: OPENGL: Smooth mouse experience when black bars are visible. This gets rid of the feeling of the mouse sticking to black borders by using the full output resolution as area for tracking game mouse movement. The same behavior is present in plain SDL output with SDL2. --- backends/graphics/opengl/opengl-graphics.cpp | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/backends/graphics/opengl/opengl-graphics.cpp b/backends/graphics/opengl/opengl-graphics.cpp index c80f57a40e..ac6d41d47d 100644 --- a/backends/graphics/opengl/opengl-graphics.cpp +++ b/backends/graphics/opengl/opengl-graphics.cpp @@ -551,11 +551,8 @@ void OpenGLGraphicsManager::warpMouse(int x, int y) { return; } - x = (x * _displayWidth) / _gameScreen->getWidth(); - y = (y * _displayHeight) / _gameScreen->getHeight(); - - x += _displayX; - y += _displayY; + x = (x * _outputScreenWidth) / _gameScreen->getWidth(); + y = (y * _outputScreenHeight) / _gameScreen->getHeight(); } setMousePosition(x, y); @@ -946,18 +943,11 @@ void OpenGLGraphicsManager::adjustMousePosition(int16 &x, int16 &y) { y = (y * _overlay->getHeight()) / _outputScreenHeight; } } else if (_gameScreen) { - x -= _displayX; - y -= _displayY; - const int16 width = _gameScreen->getWidth(); const int16 height = _gameScreen->getHeight(); - x = (x * width) / (int)_displayWidth; - y = (y * height) / (int)_displayHeight; - - // Make sure we only supply valid coordinates. - x = CLIP(x, 0, width - 1); - y = CLIP(y, 0, height - 1); + x = (x * width) / (int)_outputScreenWidth; + y = (y * height) / (int)_outputScreenHeight; } } @@ -975,8 +965,8 @@ void OpenGLGraphicsManager::setMousePosition(int x, int y) { _cursorDisplayX = x; _cursorDisplayY = y; } else { - _cursorDisplayX = CLIP(x, _displayX, _displayX + _displayWidth - 1); - _cursorDisplayY = CLIP(y, _displayY, _displayY + _displayHeight - 1); + _cursorDisplayX = _displayX + (x * _displayWidth) / _outputScreenWidth; + _cursorDisplayY = _displayY + (y * _displayHeight) / _outputScreenHeight; } } -- cgit v1.2.3 From d80c39bb29638bed4bff6453502878eaa5afbbf9 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Tue, 15 Dec 2015 03:19:25 +0200 Subject: NEVERHOOD: Update resource patches for the DR version - fixes bug #6913 Some of the resource patches needed to be modified to work with the latest changes to the DCL decoder --- engines/neverhood/resourceman.cpp | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/engines/neverhood/resourceman.cpp b/engines/neverhood/resourceman.cpp index 2065a13347..81a9d8a907 100644 --- a/engines/neverhood/resourceman.cpp +++ b/engines/neverhood/resourceman.cpp @@ -96,24 +96,26 @@ struct EntrySizeFix { static const EntrySizeFix entrySizeFixes[] = { // fileHash offset diskSize size fixedSize // Fixes for the Russian "Dyadyushka Risech" version - { 0x041137051, 667019, 23391, 41398, 41401 }, // "Options" menu header text + { 0x041137051, 667019, 23391, 41398, 29191 }, // "Options" menu header text { 0x00f960021, 402268, 1704, 4378, 1870 }, // "Save" menu { 0x01301a7ea, 1220008, 2373, 4146, 2877 }, // "Load" menu { 0x084181e81, 201409, 1622, 5058, 1833 }, // "Delete" menu + { 0x0C10B2015, 690410, 5850, 11162, 7870 }, // Menu text { 0x008C0AC24, 1031009, 3030, 6498, 3646 }, // Overwrite dialog - { 0x0c6604282, 12813649, 19623, 35894, 35895 }, // One of the fonts when reading Willie's notes + { 0x0c6604282, 12813649, 19623, 35894, 30370 }, // One of the fonts when reading Willie's notes { 0x080283101, 13104841, 1961, 3712, 3511 }, // First message from Willie + { 0x058208810, 46010519, 24852, 131874, 131776 }, // Entry to hut with musical lock (untested) { 0x000918480, 17676417, 581, 916, 706 }, // First wall in the museum - { 0x00800090C, 16064875, 19555, 38518, 38526 }, // First wall in the museum - { 0x058208810, 46010519, 24852, 131874, 131776 }, // Entry to hut with musical lock + { 0x00800090C, 16064875, 19555, 38518, 30263 }, // First wall in the museum { 0x00008E486, 39600019, 240, 454, 271 }, // Second wall in the museum { 0x003086004, 39621755, 482, 614, 600 }, // Second wall in the museum - { 0x02008048E, 39611075, 3798, 21089, 21087 }, // Next couple of walls in the museum - { 0x008586283, 39587864, 12155, 29731, 29730 }, // Next couple of walls in the museum - { 0x030A84C80, 39606142, 4933, 16305, 16275 }, // Next couple of walls in the museum - { 0x000C9A480, 39614873, 6882, 23915, 23913 }, // Next couple of walls in the museum - { 0x000098880, 39603114, 3028, 10860, 10859 }, // Next couple of walls in the museum - { 0x040080183, 39600259, 2855, 13400, 13395 }, // Last buggy wall in the museum + { 0x02008048E, 39611075, 3798, 21089, 6374 }, // Next walls in the museum + { 0x008586283, 39587864, 12155, 29731, 20582 }, // Next walls in the museum + { 0x030A84C80, 39606142, 4933, 16305, 8770 }, // Next walls in the museum + { 0x000C9A480, 39614873, 6882, 23915, 11571 }, // Next walls in the museum + { 0x000098880, 39603114, 3028, 10860, 4762 }, // Next walls in the museum + { 0x040080183, 39600259, 2855, 13400, 4305 }, // Next walls in the museum + { 0x004290188, 39580567, 7297, 27131, 12322 }, // Next walls in the museum // Fixes for the Russian "Fargus" version { 0x041137051, 758264, 29037, 49590, 49591 }, // "Options" menu header text -- cgit v1.2.3 From b9a107499911873a0f5e5452d292f6541f0f001a Mon Sep 17 00:00:00 2001 From: Bastien Bouclet Date: Fri, 27 Jun 2014 16:45:58 +0200 Subject: PS3: Make use of an updated SDL2 version This version, available at https://bitbucket.org/bgK/sdl_psl1ght, is based on SDL 2.0.3. --- backends/audiocd/sdl/sdl-audiocd.cpp | 4 +- backends/audiocd/sdl/sdl-audiocd.h | 4 +- backends/events/ps3sdl/ps3sdl-events.cpp | 8 +-- backends/events/sdl/sdl-events.cpp | 2 +- backends/mixer/sdl13/sdl13-mixer.cpp | 108 ------------------------------- backends/mixer/sdl13/sdl13-mixer.h | 67 ------------------- backends/mixer/sdl2/sdl2-mixer.cpp | 108 +++++++++++++++++++++++++++++++ backends/mixer/sdl2/sdl2-mixer.h | 67 +++++++++++++++++++ backends/module.mk | 6 +- backends/platform/sdl/ps3/ps3.cpp | 4 +- backends/platform/sdl/sdl.cpp | 8 +-- configure | 4 +- dists/ps3/readme-ps3.md | 4 +- 13 files changed, 195 insertions(+), 199 deletions(-) delete mode 100644 backends/mixer/sdl13/sdl13-mixer.cpp delete mode 100644 backends/mixer/sdl13/sdl13-mixer.h create mode 100644 backends/mixer/sdl2/sdl2-mixer.cpp create mode 100644 backends/mixer/sdl2/sdl2-mixer.h diff --git a/backends/audiocd/sdl/sdl-audiocd.cpp b/backends/audiocd/sdl/sdl-audiocd.cpp index c7b089af09..ff50c56af3 100644 --- a/backends/audiocd/sdl/sdl-audiocd.cpp +++ b/backends/audiocd/sdl/sdl-audiocd.cpp @@ -26,7 +26,7 @@ #include "backends/audiocd/sdl/sdl-audiocd.h" -#if !SDL_VERSION_ATLEAST(1, 3, 0) +#if !SDL_VERSION_ATLEAST(2, 0, 0) #include "common/textconsole.h" @@ -136,6 +136,6 @@ void SdlAudioCDManager::updateCD() { } } -#endif // !SDL_VERSION_ATLEAST(1, 3, 0) +#endif // !SDL_VERSION_ATLEAST(2, 0, 0) #endif diff --git a/backends/audiocd/sdl/sdl-audiocd.h b/backends/audiocd/sdl/sdl-audiocd.h index 783d4fe0f0..bfad7b6805 100644 --- a/backends/audiocd/sdl/sdl-audiocd.h +++ b/backends/audiocd/sdl/sdl-audiocd.h @@ -27,7 +27,7 @@ #include "backends/platform/sdl/sdl-sys.h" -#if !SDL_VERSION_ATLEAST(1, 3, 0) +#if !SDL_VERSION_ATLEAST(2, 0, 0) /** * The SDL audio cd manager. Implements real audio cd playback. @@ -49,6 +49,6 @@ protected: uint32 _cdEndTime, _cdStopTime; }; -#endif // !SDL_VERSION_ATLEAST(1, 3, 0) +#endif // !SDL_VERSION_ATLEAST(2, 0, 0) #endif diff --git a/backends/events/ps3sdl/ps3sdl-events.cpp b/backends/events/ps3sdl/ps3sdl-events.cpp index 0f6e01857b..1fc10559c2 100644 --- a/backends/events/ps3sdl/ps3sdl-events.cpp +++ b/backends/events/ps3sdl/ps3sdl-events.cpp @@ -126,8 +126,8 @@ bool PS3SdlEventSource::handleJoyButtonUp(SDL_Event &ev, Common::Event &event) { * This pauses execution and keeps redrawing the screen until the XMB is closed. */ void PS3SdlEventSource::preprocessEvents(SDL_Event *event) { - if (event->type == SDL_ACTIVEEVENT) { - if (event->active.state == SDL_APPMOUSEFOCUS && !event->active.gain) { + if (event->type == SDL_WINDOWEVENT) { + if (event->window.event == SDL_WINDOWEVENT_LEAVE) { // XMB opened if (g_engine) g_engine->pauseEngine(true); @@ -145,9 +145,9 @@ void PS3SdlEventSource::preprocessEvents(SDL_Event *event) { } if (event->type == SDL_QUIT) return; - if (event->type != SDL_ACTIVEEVENT) + if (event->type != SDL_WINDOWEVENT) continue; - if (event->active.state == SDL_APPMOUSEFOCUS && event->active.gain) { + if (event->window.event == SDL_WINDOWEVENT_ENTER) { // XMB closed if (g_engine) g_engine->pauseEngine(false); diff --git a/backends/events/sdl/sdl-events.cpp b/backends/events/sdl/sdl-events.cpp index 038f61664f..745f398be6 100644 --- a/backends/events/sdl/sdl-events.cpp +++ b/backends/events/sdl/sdl-events.cpp @@ -314,7 +314,7 @@ Common::KeyCode SdlEventSource::SDLToOSystemKeycode(const SDLKey key) { case SDLK_y: return Common::KEYCODE_y; case SDLK_z: return Common::KEYCODE_z; case SDLK_DELETE: return Common::KEYCODE_DELETE; -#if SDL_VERSION_ATLEAST(1, 3, 0) +#if SDL_VERSION_ATLEAST(2, 0, 0) case SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_GRAVE): return Common::KEYCODE_TILDE; #else case SDLK_WORLD_16: return Common::KEYCODE_TILDE; diff --git a/backends/mixer/sdl13/sdl13-mixer.cpp b/backends/mixer/sdl13/sdl13-mixer.cpp deleted file mode 100644 index dc38242bde..0000000000 --- a/backends/mixer/sdl13/sdl13-mixer.cpp +++ /dev/null @@ -1,108 +0,0 @@ -/* ScummVM - Graphic Adventure Engine - * - * ScummVM is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include "common/scummsys.h" - -#if defined(SDL_BACKEND) - -#include "backends/mixer/sdl13/sdl13-mixer.h" -#include "common/debug.h" -#include "common/system.h" -#include "common/config-manager.h" -#include "common/textconsole.h" - -#ifdef GP2X -#define SAMPLES_PER_SEC 11025 -#else -#define SAMPLES_PER_SEC 44100 -#endif - -Sdl13MixerManager::Sdl13MixerManager() - : - SdlMixerManager(), - _device(0) { - -} - -Sdl13MixerManager::~Sdl13MixerManager() { - _mixer->setReady(false); - - SDL_CloseAudioDevice(_device); - - delete _mixer; -} - -void Sdl13MixerManager::init() { - // Start SDL Audio subsystem - if (SDL_InitSubSystem(SDL_INIT_AUDIO) == -1) { - error("Could not initialize SDL: %s", SDL_GetError()); - } - - // Get the desired audio specs - SDL_AudioSpec desired = getAudioSpec(SAMPLES_PER_SEC); - - // Start SDL audio with the desired specs - _device = SDL_OpenAudioDevice(NULL, 0, &desired, &_obtained, - SDL_AUDIO_ALLOW_FREQUENCY_CHANGE); - - if (_device <= 0) { - warning("Could not open audio device: %s", SDL_GetError()); - - _mixer = new Audio::MixerImpl(g_system, desired.freq); - assert(_mixer); - _mixer->setReady(false); - } else { - debug(1, "Output sample rate: %d Hz", _obtained.freq); - - _mixer = new Audio::MixerImpl(g_system, _obtained.freq); - assert(_mixer); - _mixer->setReady(true); - - startAudio(); - } -} - -void Sdl13MixerManager::startAudio() { - // Start the sound system - SDL_PauseAudioDevice(_device, 0); -} - -void Sdl13MixerManager::suspendAudio() { - SDL_CloseAudioDevice(_device); - _audioSuspended = true; -} - -int Sdl13MixerManager::resumeAudio() { - if (!_audioSuspended) - return -2; - - _device = SDL_OpenAudioDevice(NULL, 0, &_obtained, NULL, 0); - if (_device <= 0) { - return -1; - } - - SDL_PauseAudioDevice(_device, 0); - _audioSuspended = false; - return 0; -} - -#endif diff --git a/backends/mixer/sdl13/sdl13-mixer.h b/backends/mixer/sdl13/sdl13-mixer.h deleted file mode 100644 index ff2bb43084..0000000000 --- a/backends/mixer/sdl13/sdl13-mixer.h +++ /dev/null @@ -1,67 +0,0 @@ -/* ScummVM - Graphic Adventure Engine - * - * ScummVM is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef BACKENDS_MIXER_SDL13_H -#define BACKENDS_MIXER_SDL13_H - -#include "backends/mixer/sdl/sdl-mixer.h" - -/** - * SDL mixer manager. It wraps the actual implementation - * of the Audio:Mixer used by the engine, and setups - * the SDL audio subsystem and the callback for the - * audio mixer implementation. - */ -class Sdl13MixerManager : public SdlMixerManager { -public: - Sdl13MixerManager(); - virtual ~Sdl13MixerManager(); - - /** - * Initialize and setups the mixer - */ - virtual void init(); - - /** - * Pauses the audio system - */ - virtual void suspendAudio(); - - /** - * Resumes the audio system - */ - virtual int resumeAudio(); - -protected: - - /** - * The opened SDL audio device - */ - SDL_AudioDeviceID _device; - - /** - * Starts SDL audio - */ - virtual void startAudio(); -}; - -#endif diff --git a/backends/mixer/sdl2/sdl2-mixer.cpp b/backends/mixer/sdl2/sdl2-mixer.cpp new file mode 100644 index 0000000000..96a1361a8c --- /dev/null +++ b/backends/mixer/sdl2/sdl2-mixer.cpp @@ -0,0 +1,108 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/scummsys.h" + +#if defined(SDL_BACKEND) + +#include "backends/mixer/sdl2/sdl2-mixer.h" +#include "common/debug.h" +#include "common/system.h" +#include "common/config-manager.h" +#include "common/textconsole.h" + +#ifdef GP2X +#define SAMPLES_PER_SEC 11025 +#else +#define SAMPLES_PER_SEC 44100 +#endif + +Sdl2MixerManager::Sdl2MixerManager() + : + SdlMixerManager(), + _device(0) { + +} + +Sdl2MixerManager::~Sdl2MixerManager() { + _mixer->setReady(false); + + SDL_CloseAudioDevice(_device); + + delete _mixer; +} + +void Sdl2MixerManager::init() { + // Start SDL Audio subsystem + if (SDL_InitSubSystem(SDL_INIT_AUDIO) == -1) { + error("Could not initialize SDL: %s", SDL_GetError()); + } + + // Get the desired audio specs + SDL_AudioSpec desired = getAudioSpec(SAMPLES_PER_SEC); + + // Start SDL audio with the desired specs + _device = SDL_OpenAudioDevice(NULL, 0, &desired, &_obtained, + SDL_AUDIO_ALLOW_FREQUENCY_CHANGE); + + if (_device <= 0) { + warning("Could not open audio device: %s", SDL_GetError()); + + _mixer = new Audio::MixerImpl(g_system, desired.freq); + assert(_mixer); + _mixer->setReady(false); + } else { + debug(1, "Output sample rate: %d Hz", _obtained.freq); + + _mixer = new Audio::MixerImpl(g_system, _obtained.freq); + assert(_mixer); + _mixer->setReady(true); + + startAudio(); + } +} + +void Sdl2MixerManager::startAudio() { + // Start the sound system + SDL_PauseAudioDevice(_device, 0); +} + +void Sdl2MixerManager::suspendAudio() { + SDL_CloseAudioDevice(_device); + _audioSuspended = true; +} + +int Sdl2MixerManager::resumeAudio() { + if (!_audioSuspended) + return -2; + + _device = SDL_OpenAudioDevice(NULL, 0, &_obtained, NULL, 0); + if (_device <= 0) { + return -1; + } + + SDL_PauseAudioDevice(_device, 0); + _audioSuspended = false; + return 0; +} + +#endif diff --git a/backends/mixer/sdl2/sdl2-mixer.h b/backends/mixer/sdl2/sdl2-mixer.h new file mode 100644 index 0000000000..ce2616d92b --- /dev/null +++ b/backends/mixer/sdl2/sdl2-mixer.h @@ -0,0 +1,67 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef BACKENDS_MIXER_SDL2_H +#define BACKENDS_MIXER_SDL2_H + +#include "backends/mixer/sdl/sdl-mixer.h" + +/** + * SDL mixer manager. It wraps the actual implementation + * of the Audio:Mixer used by the engine, and setups + * the SDL audio subsystem and the callback for the + * audio mixer implementation. + */ +class Sdl2MixerManager : public SdlMixerManager { +public: + Sdl2MixerManager(); + virtual ~Sdl2MixerManager(); + + /** + * Initialize and setups the mixer + */ + virtual void init(); + + /** + * Pauses the audio system + */ + virtual void suspendAudio(); + + /** + * Resumes the audio system + */ + virtual int resumeAudio(); + +protected: + + /** + * The opened SDL audio device + */ + SDL_AudioDeviceID _device; + + /** + * Starts SDL audio + */ + virtual void startAudio(); +}; + +#endif diff --git a/backends/module.mk b/backends/module.mk index e5e2905781..025d653ddd 100644 --- a/backends/module.mk +++ b/backends/module.mk @@ -72,13 +72,11 @@ MODULE_OBJS += \ plugins/sdl/sdl-provider.o \ timer/sdl/sdl-timer.o -# SDL 1.3 removed audio CD support -ifndef USE_SDL13 +# SDL 2 removed audio CD support ifndef USE_SDL2 MODULE_OBJS += \ audiocd/sdl/sdl-audiocd.o endif -endif ifdef USE_OPENGL MODULE_OBJS += \ @@ -126,7 +124,7 @@ MODULE_OBJS += \ fs/posix/posix-fs-factory.o \ fs/ps3/ps3-fs-factory.o \ events/ps3sdl/ps3sdl-events.o \ - mixer/sdl13/sdl13-mixer.o + mixer/sdl2/sdl2-mixer.o endif ifeq ($(BACKEND),tizen) diff --git a/backends/platform/sdl/ps3/ps3.cpp b/backends/platform/sdl/ps3/ps3.cpp index f111379794..e531d79fba 100644 --- a/backends/platform/sdl/ps3/ps3.cpp +++ b/backends/platform/sdl/ps3/ps3.cpp @@ -31,7 +31,7 @@ #include "backends/saves/default/default-saves.h" #include "backends/fs/ps3/ps3-fs-factory.h" #include "backends/events/ps3sdl/ps3sdl-events.h" -#include "backends/mixer/sdl13/sdl13-mixer.h" +#include "backends/mixer/sdl2/sdl2-mixer.h" #include #include @@ -70,7 +70,7 @@ void OSystem_PS3::initBackend() { // Create the mixer manager if (_mixer == 0) { - _mixerManager = new Sdl13MixerManager(); + _mixerManager = new Sdl2MixerManager(); // Setup and start mixer _mixerManager->init(); diff --git a/backends/platform/sdl/sdl.cpp b/backends/platform/sdl/sdl.cpp index 6d4dede212..fffb9d56d9 100644 --- a/backends/platform/sdl/sdl.cpp +++ b/backends/platform/sdl/sdl.cpp @@ -36,8 +36,8 @@ #include "backends/saves/default/default-saves.h" -// Audio CD support was removed with SDL 1.3 -#if SDL_VERSION_ATLEAST(1, 3, 0) +// Audio CD support was removed with SDL 2.0 +#if SDL_VERSION_ATLEAST(2, 0, 0) #include "backends/audiocd/default/default-audiocd.h" #else #include "backends/audiocd/sdl/sdl-audiocd.h" @@ -246,8 +246,8 @@ void OSystem_SDL::initBackend() { #endif if (_audiocdManager == 0) { - // Audio CD support was removed with SDL 1.3 -#if SDL_VERSION_ATLEAST(1, 3, 0) + // Audio CD support was removed with SDL 2.0 +#if SDL_VERSION_ATLEAST(2, 0, 0) _audiocdManager = new DefaultAudioCDManager(); #else _audiocdManager = new SdlAudioCDManager(); diff --git a/configure b/configure index 87070f5663..90aabc0259 100755 --- a/configure +++ b/configure @@ -2414,6 +2414,7 @@ case $_host_os in ;; ps3) # Force use of SDL and freetype from the ps3 toolchain + _sdlconfig=sdl2-config _sdlpath="$PS3DEV/portlibs/ppu:$PS3DEV/portlibs/ppu/bin" _freetypepath="$PS3DEV/portlibs/ppu:$PS3DEV/portlibs/ppu/bin" @@ -3108,9 +3109,6 @@ case $_backend in _sdlversion=`$_sdlconfig --version` case $_sdlversion in - 1.3.*) - add_line_to_config_mk "USE_SDL13 = 1" - ;; 2.0.*) add_line_to_config_mk "USE_SDL2 = 1" ;; diff --git a/dists/ps3/readme-ps3.md b/dists/ps3/readme-ps3.md index 2fb393b4fb..8290f87066 100644 --- a/dists/ps3/readme-ps3.md +++ b/dists/ps3/readme-ps3.md @@ -36,12 +36,12 @@ Unauthorized distribution of an installable package with non freeware games incl Building from source ==================== -This port of ScummVM to the PS3 is based on SDL. It uses the open source SDK PSL1GHT. +This port of ScummVM to the PS3 is based on SDL2. It uses the open source SDK PSL1GHT. The dependencies needed to build it are : - The toolchain from https://github.com/ps3dev/ps3toolchain -- SDL from https://github.com/zeldin/SDL_PSL1GHT +- SDL from https://bitbucket.org/bgK/sdl_psl1ght - ScummVM from https://github.com/scummvm/scummvm Once all the dependencies are correctly setup, an installable package can be obtained from source by issuing the following command : -- cgit v1.2.3 From f985a039d5dd8ef3d2d5700f4a32928d221836d8 Mon Sep 17 00:00:00 2001 From: Bastien Bouclet Date: Sun, 8 Mar 2015 13:13:50 +0100 Subject: SDL: Ensure the audio sample format is supported When SDL returns an unsupported audio sample format, ask SDL to do resampling to the one ScummVM expects. This is needed for the PS3 which natively only supports 32 bits floating point as a sample format. --- backends/mixer/sdl/sdl-mixer.cpp | 55 +++++++++++++++++++++++++--------------- 1 file changed, 35 insertions(+), 20 deletions(-) diff --git a/backends/mixer/sdl/sdl-mixer.cpp b/backends/mixer/sdl/sdl-mixer.cpp index dc0c853808..6afeeaefc6 100644 --- a/backends/mixer/sdl/sdl-mixer.cpp +++ b/backends/mixer/sdl/sdl-mixer.cpp @@ -78,34 +78,49 @@ void SdlMixerManager::init() { if (SDL_OpenAudio(&fmt, &_obtained) != 0) { warning("Could not open audio device: %s", SDL_GetError()); + // The mixer is not marked as ready _mixer = new Audio::MixerImpl(g_system, desired.freq); - assert(_mixer); - _mixer->setReady(false); - } else { - debug(1, "Output sample rate: %d Hz", _obtained.freq); - if (_obtained.freq != desired.freq) - warning("SDL mixer output sample rate: %d differs from desired: %d", _obtained.freq, desired.freq); + return; + } + + // The obtained sample format is not supported by the mixer, call + // SDL_OpenAudio again with NULL as the second argument to force + // SDL to do resampling to the desired audio spec. + if (_obtained.format != desired.format) { + debug(1, "SDL mixer sound format: %d differs from desired: %d", _obtained.format, desired.format); + SDL_CloseAudio(); + + if (SDL_OpenAudio(&fmt, NULL) != 0) { + warning("Could not open audio device: %s", SDL_GetError()); + + // The mixer is not marked as ready + _mixer = new Audio::MixerImpl(g_system, desired.freq); + return; + } - debug(1, "Output buffer size: %d samples", _obtained.samples); - if (_obtained.samples != desired.samples) - warning("SDL mixer output buffer size: %d differs from desired: %d", _obtained.samples, desired.samples); + _obtained = desired; + } + + debug(1, "Output sample rate: %d Hz", _obtained.freq); + if (_obtained.freq != desired.freq) + warning("SDL mixer output sample rate: %d differs from desired: %d", _obtained.freq, desired.freq); - if (_obtained.format != desired.format) - warning("SDL mixer sound format: %d differs from desired: %d", _obtained.format, desired.format); + debug(1, "Output buffer size: %d samples", _obtained.samples); + if (_obtained.samples != desired.samples) + warning("SDL mixer output buffer size: %d differs from desired: %d", _obtained.samples, desired.samples); #ifndef __SYMBIAN32__ - // The SymbianSdlMixerManager does stereo->mono downmixing, - // but otherwise we require stereo output. - if (_obtained.channels != 2) - error("SDL mixer output requires stereo output device"); + // The SymbianSdlMixerManager does stereo->mono downmixing, + // but otherwise we require stereo output. + if (_obtained.channels != 2) + error("SDL mixer output requires stereo output device"); #endif - _mixer = new Audio::MixerImpl(g_system, _obtained.freq); - assert(_mixer); - _mixer->setReady(true); + _mixer = new Audio::MixerImpl(g_system, _obtained.freq); + assert(_mixer); + _mixer->setReady(true); - startAudio(); - } + startAudio(); } SDL_AudioSpec SdlMixerManager::getAudioSpec(uint32 outputRate) { -- cgit v1.2.3 From aa9191c4c46183664d2c3f64dbebbb1119067148 Mon Sep 17 00:00:00 2001 From: Bastien Bouclet Date: Sun, 8 Mar 2015 13:18:45 +0100 Subject: PS3: Remove the SDL2 mixer manager. It was only used by the PS3 backend, and the standard SDL mixer was fixed to work in the PS3 case. --- backends/mixer/sdl2/sdl2-mixer.cpp | 108 ------------------------------------- backends/mixer/sdl2/sdl2-mixer.h | 67 ----------------------- backends/module.mk | 3 +- backends/platform/sdl/ps3/ps3.cpp | 9 ---- 4 files changed, 1 insertion(+), 186 deletions(-) delete mode 100644 backends/mixer/sdl2/sdl2-mixer.cpp delete mode 100644 backends/mixer/sdl2/sdl2-mixer.h diff --git a/backends/mixer/sdl2/sdl2-mixer.cpp b/backends/mixer/sdl2/sdl2-mixer.cpp deleted file mode 100644 index 96a1361a8c..0000000000 --- a/backends/mixer/sdl2/sdl2-mixer.cpp +++ /dev/null @@ -1,108 +0,0 @@ -/* ScummVM - Graphic Adventure Engine - * - * ScummVM is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include "common/scummsys.h" - -#if defined(SDL_BACKEND) - -#include "backends/mixer/sdl2/sdl2-mixer.h" -#include "common/debug.h" -#include "common/system.h" -#include "common/config-manager.h" -#include "common/textconsole.h" - -#ifdef GP2X -#define SAMPLES_PER_SEC 11025 -#else -#define SAMPLES_PER_SEC 44100 -#endif - -Sdl2MixerManager::Sdl2MixerManager() - : - SdlMixerManager(), - _device(0) { - -} - -Sdl2MixerManager::~Sdl2MixerManager() { - _mixer->setReady(false); - - SDL_CloseAudioDevice(_device); - - delete _mixer; -} - -void Sdl2MixerManager::init() { - // Start SDL Audio subsystem - if (SDL_InitSubSystem(SDL_INIT_AUDIO) == -1) { - error("Could not initialize SDL: %s", SDL_GetError()); - } - - // Get the desired audio specs - SDL_AudioSpec desired = getAudioSpec(SAMPLES_PER_SEC); - - // Start SDL audio with the desired specs - _device = SDL_OpenAudioDevice(NULL, 0, &desired, &_obtained, - SDL_AUDIO_ALLOW_FREQUENCY_CHANGE); - - if (_device <= 0) { - warning("Could not open audio device: %s", SDL_GetError()); - - _mixer = new Audio::MixerImpl(g_system, desired.freq); - assert(_mixer); - _mixer->setReady(false); - } else { - debug(1, "Output sample rate: %d Hz", _obtained.freq); - - _mixer = new Audio::MixerImpl(g_system, _obtained.freq); - assert(_mixer); - _mixer->setReady(true); - - startAudio(); - } -} - -void Sdl2MixerManager::startAudio() { - // Start the sound system - SDL_PauseAudioDevice(_device, 0); -} - -void Sdl2MixerManager::suspendAudio() { - SDL_CloseAudioDevice(_device); - _audioSuspended = true; -} - -int Sdl2MixerManager::resumeAudio() { - if (!_audioSuspended) - return -2; - - _device = SDL_OpenAudioDevice(NULL, 0, &_obtained, NULL, 0); - if (_device <= 0) { - return -1; - } - - SDL_PauseAudioDevice(_device, 0); - _audioSuspended = false; - return 0; -} - -#endif diff --git a/backends/mixer/sdl2/sdl2-mixer.h b/backends/mixer/sdl2/sdl2-mixer.h deleted file mode 100644 index ce2616d92b..0000000000 --- a/backends/mixer/sdl2/sdl2-mixer.h +++ /dev/null @@ -1,67 +0,0 @@ -/* ScummVM - Graphic Adventure Engine - * - * ScummVM is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef BACKENDS_MIXER_SDL2_H -#define BACKENDS_MIXER_SDL2_H - -#include "backends/mixer/sdl/sdl-mixer.h" - -/** - * SDL mixer manager. It wraps the actual implementation - * of the Audio:Mixer used by the engine, and setups - * the SDL audio subsystem and the callback for the - * audio mixer implementation. - */ -class Sdl2MixerManager : public SdlMixerManager { -public: - Sdl2MixerManager(); - virtual ~Sdl2MixerManager(); - - /** - * Initialize and setups the mixer - */ - virtual void init(); - - /** - * Pauses the audio system - */ - virtual void suspendAudio(); - - /** - * Resumes the audio system - */ - virtual int resumeAudio(); - -protected: - - /** - * The opened SDL audio device - */ - SDL_AudioDeviceID _device; - - /** - * Starts SDL audio - */ - virtual void startAudio(); -}; - -#endif diff --git a/backends/module.mk b/backends/module.mk index 025d653ddd..3d7dea1f26 100644 --- a/backends/module.mk +++ b/backends/module.mk @@ -123,8 +123,7 @@ MODULE_OBJS += \ fs/posix/posix-fs.o \ fs/posix/posix-fs-factory.o \ fs/ps3/ps3-fs-factory.o \ - events/ps3sdl/ps3sdl-events.o \ - mixer/sdl2/sdl2-mixer.o + events/ps3sdl/ps3sdl-events.o endif ifeq ($(BACKEND),tizen) diff --git a/backends/platform/sdl/ps3/ps3.cpp b/backends/platform/sdl/ps3/ps3.cpp index e531d79fba..0bb8300014 100644 --- a/backends/platform/sdl/ps3/ps3.cpp +++ b/backends/platform/sdl/ps3/ps3.cpp @@ -31,7 +31,6 @@ #include "backends/saves/default/default-saves.h" #include "backends/fs/ps3/ps3-fs-factory.h" #include "backends/events/ps3sdl/ps3sdl-events.h" -#include "backends/mixer/sdl2/sdl2-mixer.h" #include #include @@ -68,14 +67,6 @@ void OSystem_PS3::initBackend() { if (_savefileManager == 0) _savefileManager = new DefaultSaveFileManager(PREFIX "/saves"); - // Create the mixer manager - if (_mixer == 0) { - _mixerManager = new Sdl2MixerManager(); - - // Setup and start mixer - _mixerManager->init(); - } - // Event source if (_eventSource == 0) _eventSource = new PS3SdlEventSource(); -- cgit v1.2.3 From f37fb24caa87f5cde418ac8376e7fab1a1207dae Mon Sep 17 00:00:00 2001 From: Bastien Bouclet Date: Sun, 8 Mar 2015 13:45:03 +0100 Subject: PS3: Set the default audio output rate to 48000 Hz SDL does an awful job at resampling 44100 -> 48000 Hz --- backends/mixer/sdl/sdl-mixer.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/backends/mixer/sdl/sdl-mixer.cpp b/backends/mixer/sdl/sdl-mixer.cpp index 6afeeaefc6..0ca3231892 100644 --- a/backends/mixer/sdl/sdl-mixer.cpp +++ b/backends/mixer/sdl/sdl-mixer.cpp @@ -30,8 +30,10 @@ #include "common/config-manager.h" #include "common/textconsole.h" -#ifdef GP2X +#if defined(GP2X) #define SAMPLES_PER_SEC 11025 +#elif defined(PLAYSTATION3) +#define SAMPLES_PER_SEC 48000 #else #define SAMPLES_PER_SEC 44100 #endif -- cgit v1.2.3 From b729dbf1bb910e367fdcd86927564de95d10b46f Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Wed, 16 Dec 2015 00:28:24 +0100 Subject: IPHONE: Remove creation of scummvm-iph5 binary. This was only required for the old toolchain we do not use anymore. --- ports.mk | 6 ------ 1 file changed, 6 deletions(-) diff --git a/ports.mk b/ports.mk index 0ffc4bf548..1be3c44ced 100644 --- a/ports.mk +++ b/ports.mk @@ -91,12 +91,6 @@ endif cp $(srcdir)/dists/iphone/icon.png $(bundle_name)/ cp $(srcdir)/dists/iphone/icon-72.png $(bundle_name)/ cp $(srcdir)/dists/iphone/Default.png $(bundle_name)/ - # Binary patch workaround for Iphone 5/IPad 4 "Illegal instruction: 4" toolchain issue (http://code.google.com/p/iphone-gcc-full/issues/detail?id=6) - cp scummvm scummvm-iph5 - sed -i'' 's/\x00\x30\x93\xe4/\x00\x30\x93\xe5/g;s/\x00\x30\xd3\xe4/\x00\x30\xd3\xe5/g;' scummvm-iph5 - ldid -S scummvm-iph5 - chmod 755 scummvm-iph5 - cp scummvm-iph5 $(bundle_name)/ScummVM-iph5 # Location of static libs for the iPhone ifneq ($(BACKEND), iphone) -- cgit v1.2.3 From 3fab9056296fbf491372f66f7fbb23d6312ad2ad Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Wed, 16 Dec 2015 01:15:23 +0100 Subject: CONFIGURE: Disable use of USE_ARM_SOUND_ASM. The feature is currently broken (see bug #6957 "AUDIO: ARM ASM sound code causes distorted audio on 32 bit armv6"). Fixing the feature looks highly non-trivial and since nobody volunteered so far it's unlikely we will see any fix soon. --- configure | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/configure b/configure index 90aabc0259..d28b41163f 100755 --- a/configure +++ b/configure @@ -2048,7 +2048,12 @@ case $_host_cpu in arm*) echo "ARM" define_in_config_if_yes yes 'USE_ARM_SCALER_ASM' - define_in_config_if_yes yes 'USE_ARM_SOUND_ASM' + # FIXME: The following feature exhibits a bug. It produces distorted + # sound since 9003ce517ff9906b0288f9f7c02197fd091d4554. The ARM + # assembly will need to be properly adapted to the changes to the C + # code in 8f5a7cde2f99de9fef849b0ff688906f05f4643e. + # See bug #6957: "AUDIO: ARM ASM sound code causes distorted audio on 32 bit armv6" + #define_in_config_if_yes yes 'USE_ARM_SOUND_ASM' define_in_config_if_yes yes 'USE_ARM_SMUSH_ASM' define_in_config_if_yes yes 'USE_ARM_GFX_ASM' # FIXME: The following feature exhibits a bug during the intro scene of Indy 4 -- cgit v1.2.3