Merged the FSNode branch with trunk r27031:27680
svn-id: r27681
This commit is contained in:
commit
cacd7a28fd
358 changed files with 9066 additions and 46890 deletions
2
AUTHORS
2
AUTHORS
|
@ -238,6 +238,7 @@ Other contributions
|
||||||
and right click input method
|
and right click input method
|
||||||
Mikesch Nepomuk - MI1 VGA floppy patches
|
Mikesch Nepomuk - MI1 VGA floppy patches
|
||||||
Nicolas Noble - Config file and ALSA support
|
Nicolas Noble - Config file and ALSA support
|
||||||
|
Tim Phillips - Initial MI1 CD music support
|
||||||
Quietust - Sound support for Amiga SCUMM V2/V3 games, MM
|
Quietust - Sound support for Amiga SCUMM V2/V3 games, MM
|
||||||
NES support
|
NES support
|
||||||
Andreas Roever - Broken Sword 1/2 MPEG2 cutscene support
|
Andreas Roever - Broken Sword 1/2 MPEG2 cutscene support
|
||||||
|
@ -245,7 +246,6 @@ Other contributions
|
||||||
Daniel Schepler - Final MI1 CD music support, initial Ogg Vorbis
|
Daniel Schepler - Final MI1 CD music support, initial Ogg Vorbis
|
||||||
support
|
support
|
||||||
Andre Souza - SDL-based OpenGL renderer
|
Andre Souza - SDL-based OpenGL renderer
|
||||||
Tim Phillips - Initial MI1 CD music support
|
|
||||||
Robin Watts - ARM assembly routines for the Windows CE port
|
Robin Watts - ARM assembly routines for the Windows CE port
|
||||||
|
|
||||||
And to all the contributors, users, and beta testers we've missed. Thanks!
|
And to all the contributors, users, and beta testers we've missed. Thanks!
|
||||||
|
|
118
COPYRIGHT
118
COPYRIGHT
|
@ -13,6 +13,7 @@ Jurgen Braam
|
||||||
Ralph Brorsen
|
Ralph Brorsen
|
||||||
James Brown
|
James Brown
|
||||||
Stuart Caie
|
Stuart Caie
|
||||||
|
Filippos Carapetis
|
||||||
Jamieson Christian
|
Jamieson Christian
|
||||||
Marcus Comstedt
|
Marcus Comstedt
|
||||||
Paolo Costabel
|
Paolo Costabel
|
||||||
|
@ -69,3 +70,120 @@ Jezar
|
||||||
n0p
|
n0p
|
||||||
peres
|
peres
|
||||||
Quietust
|
Quietust
|
||||||
|
|
||||||
|
|
||||||
|
Patches contributed by:
|
||||||
|
|
||||||
|
Laura Abbott "sageofminerva"
|
||||||
|
Vikram Aggarwal "youngelf"
|
||||||
|
Dieter Baron "dillo"
|
||||||
|
Alban Bedel "albeu"
|
||||||
|
Bodo Bellut "bellut"
|
||||||
|
Andreas Bierfert "awjb"
|
||||||
|
Elio Blanca "eblanca76"
|
||||||
|
David Breakey "dbreakey"
|
||||||
|
Robert Buchholz "prendi"
|
||||||
|
Filippos Carapetis "thebluegr"
|
||||||
|
Mathieu Carot "yokna"
|
||||||
|
Stefano Ceccherini "jackburton"
|
||||||
|
Travis S Coady "theealien"
|
||||||
|
Josh Coalson "jcoalson"
|
||||||
|
Thomas Combeleran "hibernatus"
|
||||||
|
Carlos Corbacho "cathectic"
|
||||||
|
Roberto Costa "fiix76"
|
||||||
|
Michael Drueing "doc_wagon"
|
||||||
|
Matthew Duggan "stauff1"
|
||||||
|
John Eckerdal "johneck"
|
||||||
|
Florent "flobo"
|
||||||
|
Florob "florob"
|
||||||
|
Mike Frysinger "vapier"
|
||||||
|
Chris Gelatt "kreeblah"
|
||||||
|
Jens Georg "phako"
|
||||||
|
Nicolas George "cigaes"
|
||||||
|
Jonathan Gevaryahu "lord_nightmare"
|
||||||
|
Tobias Gruetzmacher "tobig"
|
||||||
|
Damien Guard "damienguard"
|
||||||
|
Tobias Gunkel "tobigun"
|
||||||
|
Matti Hamalainen "ccrtnsp"
|
||||||
|
Matt Hargett "matt_hargett"
|
||||||
|
Stefan Haubenthal "polluks"
|
||||||
|
Alexander Holler "holler"
|
||||||
|
Falk Hueffner "mellum"
|
||||||
|
Casey Hutchinson "nnooiissee"
|
||||||
|
Gregor Jasny "gjasny"
|
||||||
|
Jellby "jellby"
|
||||||
|
Joerg "macdrega"
|
||||||
|
Matt Johnson "mattjon"
|
||||||
|
Nicolas Joly "njoly"
|
||||||
|
KeithS "keithscr"
|
||||||
|
Sam Kenny "sam_k"
|
||||||
|
Koen Kooi "koenkooi"
|
||||||
|
Zygmunt Krynicki "zygoon"
|
||||||
|
Janne Kujanpaa "jukuja"
|
||||||
|
Jay Lanagan "r0ni"
|
||||||
|
Norbert Lange "nolange"
|
||||||
|
Manuel Lauss "mlau2"
|
||||||
|
Duncan Lock "dflock"
|
||||||
|
Mark Lodato "itsr0y"
|
||||||
|
Fridvin Logi "phillip_j_fry"
|
||||||
|
Georg Lukas "ge0rg"
|
||||||
|
Markus "meist3r"
|
||||||
|
Connor McLeod "mcleod2032"
|
||||||
|
Mickey McMurray "metafox"
|
||||||
|
Vladimir Menshakov "megath"
|
||||||
|
Frank Meyering "frank_m24"
|
||||||
|
Gael Le Migno "kilobug"
|
||||||
|
Alyssa Anne Milburn "fuzzie"
|
||||||
|
Andy Molloy "maloi"
|
||||||
|
Armin Mueller "arm_in"
|
||||||
|
Andrea Musuruane "musuruan"
|
||||||
|
Peter Naulls "pnaulls"
|
||||||
|
Christian Neumair "mannythegnome"
|
||||||
|
Nicos "anarxia"
|
||||||
|
Juha Niemimaki "capehill"
|
||||||
|
Markus Niemisto "niemisto"
|
||||||
|
Chris Paras "paras_rasmatazz"
|
||||||
|
Aubin Paul "outlyer"
|
||||||
|
Thomas Fach Pedersen "madm00se"
|
||||||
|
Carsten Pohl "carstenpohl"
|
||||||
|
Markus Pyykko "mankeli"
|
||||||
|
Richard "trinity78"
|
||||||
|
Felix Riemann "kirschsaft"
|
||||||
|
Timo Roehling "t1m0"
|
||||||
|
Andreas Roever "roever"
|
||||||
|
Jonathan Rogers "jonner"
|
||||||
|
Marek Roth "logicdeluxe"
|
||||||
|
Simon Sawatzki "simsaw"
|
||||||
|
Daniel Schepler "dschepler"
|
||||||
|
Florian Schmitt "fatpenguin"
|
||||||
|
Mark Schreiber "mark7"
|
||||||
|
Ben Shadwick "benshadwick"
|
||||||
|
Jean-Yves Simon "lethalwp"
|
||||||
|
Andrej Sinicyn "andrej4000"
|
||||||
|
Andre Souza "luke_br"
|
||||||
|
Steve Stavropoulos "isnothere"
|
||||||
|
Daniel Steinberger "amorphousshape"
|
||||||
|
Sven Strothoff "dataslayer"
|
||||||
|
Andrea Suatoni "mrhandler"
|
||||||
|
Luigi Toscano "ltosky"
|
||||||
|
Xavier Trochu "xtrochu"
|
||||||
|
Michael Udaltsov "cccp99"
|
||||||
|
Kristof Vansant "lupusbe"
|
||||||
|
Jordi Vilalta "jvprat"
|
||||||
|
Tim Walters "realmz"
|
||||||
|
David Weinehall "weine"
|
||||||
|
Eric A. Welsh "eweish42"
|
||||||
|
Yudhi Widyatama "yudhi97"
|
||||||
|
Robert Wohlrab "moshroum"
|
||||||
|
Benjamin W. Zale "junior_aepi"
|
||||||
|
the rara avis "theraraavis"
|
||||||
|
dewt "mncl"
|
||||||
|
dubsdj
|
||||||
|
exo "exofreeze"
|
||||||
|
dc france "erwan2004"
|
||||||
|
j0tt
|
||||||
|
glo kidd "glo_kidd"
|
||||||
|
ole
|
||||||
|
phi1
|
||||||
|
spookypeanut "spookypeanut"
|
||||||
|
tbcarey
|
||||||
|
|
10
Makefile
10
Makefile
|
@ -56,7 +56,7 @@ install: all
|
||||||
$(INSTALL) -d "$(DESTDIR)$(PREFIX)/share/pixmaps/"
|
$(INSTALL) -d "$(DESTDIR)$(PREFIX)/share/pixmaps/"
|
||||||
$(INSTALL) -c -m 644 "$(srcdir)/icons/scummvm.xpm" "$(DESTDIR)$(PREFIX)/share/pixmaps/scummvm.xpm"
|
$(INSTALL) -c -m 644 "$(srcdir)/icons/scummvm.xpm" "$(DESTDIR)$(PREFIX)/share/pixmaps/scummvm.xpm"
|
||||||
$(INSTALL) -d "$(DESTDIR)$(PREFIX)/share/doc/scummvm/"
|
$(INSTALL) -d "$(DESTDIR)$(PREFIX)/share/doc/scummvm/"
|
||||||
$(INSTALL) -c -m 644 "$(srcdir)/AUTHORS" "$(srcdir)/COPYING" "$(srcdir)/NEWS" "$(srcdir)/README" "$(DESTDIR)$(PREFIX)/share/doc/scummvm/"
|
$(INSTALL) -c -m 644 "$(srcdir)/AUTHORS" "$(srcdir)/COPYING" "$(srcdir)/COPYRIGHT" "$(srcdir)/NEWS" "$(srcdir)/README" "$(DESTDIR)$(PREFIX)/share/doc/scummvm/"
|
||||||
$(INSTALL) -d "$(DESTDIR)$(DATADIR)/scummvm/"
|
$(INSTALL) -d "$(DESTDIR)$(DATADIR)/scummvm/"
|
||||||
$(INSTALL) -c -m 644 "$(srcdir)/gui/themes/modern.ini" "$(srcdir)/gui/themes/modern.zip" "$(srcdir)/gui/themes/classic080.ini" "$(DESTDIR)$(DATADIR)/scummvm/"
|
$(INSTALL) -c -m 644 "$(srcdir)/gui/themes/modern.ini" "$(srcdir)/gui/themes/modern.zip" "$(srcdir)/gui/themes/classic080.ini" "$(DESTDIR)$(DATADIR)/scummvm/"
|
||||||
|
|
||||||
|
@ -90,6 +90,10 @@ bundle: scummvm-static
|
||||||
cp $(srcdir)/icons/scummvm.icns $(bundle_name)/Contents/Resources/
|
cp $(srcdir)/icons/scummvm.icns $(bundle_name)/Contents/Resources/
|
||||||
cp $(srcdir)/gui/themes/modern.ini $(bundle_name)/Contents/Resources/
|
cp $(srcdir)/gui/themes/modern.ini $(bundle_name)/Contents/Resources/
|
||||||
cp $(srcdir)/gui/themes/modern.zip $(bundle_name)/Contents/Resources/
|
cp $(srcdir)/gui/themes/modern.zip $(bundle_name)/Contents/Resources/
|
||||||
|
cp $(srcdir)/dists/pred.dic $(bundle_name)/Contents/Resources/
|
||||||
|
cp $(srcdir)/../../engine-data/trunk/kyra.dat $(bundle_name)/Contents/Resources/KYRA.DAT
|
||||||
|
cp $(srcdir)/../../engine-data/trunk/queen.tbl $(bundle_name)/Contents/Resources/
|
||||||
|
cp $(srcdir)/../../engine-data/trunk/sky.cpt $(bundle_name)/Contents/Resources/
|
||||||
cp scummvm-static $(bundle_name)/Contents/MacOS/scummvm
|
cp scummvm-static $(bundle_name)/Contents/MacOS/scummvm
|
||||||
$(srcdir)/tools/credits.pl --rtf > $(bundle_name)/Contents/Resources/Credits.rtf
|
$(srcdir)/tools/credits.pl --rtf > $(bundle_name)/Contents/Resources/Credits.rtf
|
||||||
strip $(bundle_name)/Contents/MacOS/scummvm
|
strip $(bundle_name)/Contents/MacOS/scummvm
|
||||||
|
@ -136,6 +140,7 @@ osxsnap: bundle credits
|
||||||
mkdir ScummVM-snapshot
|
mkdir ScummVM-snapshot
|
||||||
cp AUTHORS ./ScummVM-snapshot/Authors
|
cp AUTHORS ./ScummVM-snapshot/Authors
|
||||||
cp COPYING ./ScummVM-snapshot/License
|
cp COPYING ./ScummVM-snapshot/License
|
||||||
|
cp COPYRIGHT ./ScummVM-snapshot/Copyright\ Holders
|
||||||
cp NEWS ./ScummVM-snapshot/News
|
cp NEWS ./ScummVM-snapshot/News
|
||||||
cp README ./ScummVM-snapshot/ScummVM\ ReadMe
|
cp README ./ScummVM-snapshot/ScummVM\ ReadMe
|
||||||
/Developer/Tools/SetFile -t ttro -c ttxt ./ScummVM-snapshot/*
|
/Developer/Tools/SetFile -t ttro -c ttxt ./ScummVM-snapshot/*
|
||||||
|
@ -154,10 +159,12 @@ osxsnap: bundle credits
|
||||||
win32dist: scummvm$(EXEEXT)
|
win32dist: scummvm$(EXEEXT)
|
||||||
mkdir -p $(WIN32PATH)
|
mkdir -p $(WIN32PATH)
|
||||||
strip scummvm.exe -o $(WIN32PATH)/scummvm$(EXEEXT)
|
strip scummvm.exe -o $(WIN32PATH)/scummvm$(EXEEXT)
|
||||||
|
cp dists/pred.dic $(WIN32PATH)
|
||||||
cp gui/themes/modern.ini $(WIN32PATH)
|
cp gui/themes/modern.ini $(WIN32PATH)
|
||||||
cp gui/themes/modern.zip $(WIN32PATH)
|
cp gui/themes/modern.zip $(WIN32PATH)
|
||||||
cp AUTHORS $(WIN32PATH)/AUTHORS.txt
|
cp AUTHORS $(WIN32PATH)/AUTHORS.txt
|
||||||
cp COPYING $(WIN32PATH)/COPYING.txt
|
cp COPYING $(WIN32PATH)/COPYING.txt
|
||||||
|
cp COPYRIGHT $(WIN32PATH)/COPYRIGHT.txt
|
||||||
cp NEWS $(WIN32PATH)/NEWS.txt
|
cp NEWS $(WIN32PATH)/NEWS.txt
|
||||||
cp README $(WIN32PATH)/README.txt
|
cp README $(WIN32PATH)/README.txt
|
||||||
cp /usr/local/README-SDL.txt $(WIN32PATH)
|
cp /usr/local/README-SDL.txt $(WIN32PATH)
|
||||||
|
@ -173,6 +180,7 @@ aos4dist: scummvm
|
||||||
cp gui/themes/modern.zip $(AOS4PATH)
|
cp gui/themes/modern.zip $(AOS4PATH)
|
||||||
cp AUTHORS $(AOS4PATH)/AUTHORS.txt
|
cp AUTHORS $(AOS4PATH)/AUTHORS.txt
|
||||||
cp COPYING $(AOS4PATH)/COPYING.txt
|
cp COPYING $(AOS4PATH)/COPYING.txt
|
||||||
|
cp COPYRIGHT $(AOS4PATH)/COPYRIGHT.txt
|
||||||
cp NEWS $(AOS4PATH)/NEWS.txt
|
cp NEWS $(AOS4PATH)/NEWS.txt
|
||||||
cp README $(AOS4PATH)/README.txt
|
cp README $(AOS4PATH)/README.txt
|
||||||
cp /sdk/local/documentation/SDL-1.2.9/README-SDL.txt $(AOS4PATH)
|
cp /sdk/local/documentation/SDL-1.2.9/README-SDL.txt $(AOS4PATH)
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
# a list of common object files etc.
|
# a list of common object files etc.
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
# The defaul build target: just build the scummvm executable
|
# The default build target: just build the scummvm executable
|
||||||
######################################################################
|
######################################################################
|
||||||
all: $(EXECUTABLE) plugins
|
all: $(EXECUTABLE) plugins
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ all: $(EXECUTABLE) plugins
|
||||||
# Files that are to be included in the archive built by "make dist"
|
# Files that are to be included in the archive built by "make dist"
|
||||||
DISTFILES := \
|
DISTFILES := \
|
||||||
Makefile Makefile.common \
|
Makefile Makefile.common \
|
||||||
AUTHORS NEWS README COPYING
|
AUTHORS NEWS README COPYING COPYRIGHT
|
||||||
|
|
||||||
# The dist file name
|
# The dist file name
|
||||||
ZIPFILE := scummvm-`date '+%Y-%m-%d'`.zip
|
ZIPFILE := scummvm-`date '+%Y-%m-%d'`.zip
|
||||||
|
|
25
NEWS
25
NEWS
|
@ -1,7 +1,11 @@
|
||||||
For a more comprehensive changelog for the latest experimental SVN code, see:
|
For a more comprehensive changelog for the latest experimental SVN code, see:
|
||||||
http://scummvm.sourceforge.net/daily/ChangeLog
|
http://scummvm.sourceforge.net/daily/ChangeLog
|
||||||
|
|
||||||
0.10.0 (????-??-??)
|
0.11.0 (????-??-??)
|
||||||
|
Broken Sword 1:
|
||||||
|
- Added support for FLAC encoded music.
|
||||||
|
|
||||||
|
0.10.0 (2007-06-20)
|
||||||
New Games:
|
New Games:
|
||||||
- Added Cinematique evo 1 engine. Currently only Future Wars is supported.
|
- Added Cinematique evo 1 engine. Currently only Future Wars is supported.
|
||||||
- Added Touche: The Adventures of the Fifth Musketeer engine.
|
- Added Touche: The Adventures of the Fifth Musketeer engine.
|
||||||
|
@ -16,7 +20,7 @@ For a more comprehensive changelog for the latest experimental SVN code, see:
|
||||||
General:
|
General:
|
||||||
- Added dialog which allows the user to select the GUI theme on runtime.
|
- Added dialog which allows the user to select the GUI theme on runtime.
|
||||||
- Added 'Mass Add' feature to the Launcher, which allows you to scan for
|
- Added 'Mass Add' feature to the Launcher, which allows you to scan for
|
||||||
all games in all subfolders of a given directory (to use it, press
|
all games in all subdirectories of a given directory (to use it, press
|
||||||
shift then click on "Add Game").
|
shift then click on "Add Game").
|
||||||
- Improved the way the auto detector generates target names, it now takes
|
- Improved the way the auto detector generates target names, it now takes
|
||||||
a game's variant, language and platform into account.
|
a game's variant, language and platform into account.
|
||||||
|
@ -59,11 +63,26 @@ For a more comprehensive changelog for the latest experimental SVN code, see:
|
||||||
LINC space and terminals, particularly in non-English languages.
|
LINC space and terminals, particularly in non-English languages.
|
||||||
|
|
||||||
Nintendo DS Port:
|
Nintendo DS Port:
|
||||||
- TOOO: Mention DLDI support
|
- New engines supported: AGI, CINE, and SAGA
|
||||||
|
- Option to show the mouse cursor
|
||||||
|
- Word completion on keyboard for AGI games
|
||||||
|
- Plenty of optimisations
|
||||||
|
|
||||||
|
Symbian Port:
|
||||||
|
- Added support for MP3 to S60v3 and UIQ3 versions.
|
||||||
|
- Switched to SDL 1.2.11 for bug fixes and improvements
|
||||||
|
- Improved performance for S60v3 and UIQ3 using ARM target.
|
||||||
|
- Limited support for pre Symbian OS9 devices due to compiler issues.
|
||||||
|
- Updated key mapping handling.
|
||||||
|
|
||||||
WinCE Port:
|
WinCE Port:
|
||||||
- Switched to using a GCC toolchain for building.
|
- Switched to using a GCC toolchain for building.
|
||||||
- Major update to the SDL lib. Better, faster, more compatible :-)
|
- Major update to the SDL lib. Better, faster, more compatible :-)
|
||||||
|
The included fixes are too numerous to mention here.
|
||||||
|
Most of the updates in this version have concentrated on infrastructure.
|
||||||
|
This leads to faster execution, greatly increased compatibility and
|
||||||
|
OS friendliness - especially for keyboard/mouse input and display
|
||||||
|
handling (f.ex. no more popups during gameplay) -.
|
||||||
|
|
||||||
Windows Port:
|
Windows Port:
|
||||||
- The default location of the config file changed, to support multi-user
|
- The default location of the config file changed, to support multi-user
|
||||||
|
|
223
README
223
README
|
@ -29,7 +29,8 @@ Table of Contents:
|
||||||
* 3.12 Simon the Sorcerer notes
|
* 3.12 Simon the Sorcerer notes
|
||||||
* 3.13 The Feeble Files notes
|
* 3.13 The Feeble Files notes
|
||||||
* 3.14 The Legend of Kyrandia notes
|
* 3.14 The Legend of Kyrandia notes
|
||||||
* 3.15 Known Problems
|
* 3.15 Sierra AGI games Predictive Input Dialog notes
|
||||||
|
* 3.16 Known Problems
|
||||||
4.0) Supported Platforms
|
4.0) Supported Platforms
|
||||||
5.0) Running ScummVM
|
5.0) Running ScummVM
|
||||||
* 5.1 Command Line Options
|
* 5.1 Command Line Options
|
||||||
|
@ -137,15 +138,26 @@ SCUMM Games by LucasArts:
|
||||||
The Dig [dig]
|
The Dig [dig]
|
||||||
The Curse of Monkey Island [comi]
|
The Curse of Monkey Island [comi]
|
||||||
|
|
||||||
Other Games:
|
AGI Games by Sierra:
|
||||||
Beneath a Steel Sky [sky]
|
The Black Cauldron [bc]
|
||||||
Broken Sword 1: The Shadow of the Templars [sword1]
|
Gold Rush! [goldrush]
|
||||||
Broken Sword 2: The Smoking Mirror [sword2]
|
King's Quest I [kq1]
|
||||||
Flight of the Amazon Queen [queen]
|
King's Quest II [kq2]
|
||||||
Future Wars [fw]
|
King's Quest III [kq3]
|
||||||
Gobliiins [gob1]
|
King's Quest IV [kq4]
|
||||||
Gobliins 2 [gob2]
|
Leisure Suit Larry in the Land of the
|
||||||
Inherit the Earth: Quest for the Orb [ite]
|
Lounge Lizards [lsl1]
|
||||||
|
Mixed-Up Mother Goose [mixedup]
|
||||||
|
Manhunter 1: New York [mh1]
|
||||||
|
Manhunter 2: San Francisco [mh2]
|
||||||
|
Police Quest I: In Pursuit of the Death
|
||||||
|
Angel [pq1]
|
||||||
|
Space Quest I: The Sarien Encounter [sq1]
|
||||||
|
Space Quest II: Vohaul's Revenge [sq2]
|
||||||
|
Fanmade Games [agi-fanmade]
|
||||||
|
|
||||||
|
AGOS Games by Adventuresoft / Horrorsoft:
|
||||||
|
Elvira - Mistress of the Dark [elvira1]
|
||||||
Simon the Sorcerer 1 [simon1]
|
Simon the Sorcerer 1 [simon1]
|
||||||
Simon the Sorcerer 2 [simon2]
|
Simon the Sorcerer 2 [simon2]
|
||||||
Simon the Sorcerer's Puzzle Pack
|
Simon the Sorcerer's Puzzle Pack
|
||||||
|
@ -157,6 +169,22 @@ Other Games:
|
||||||
Simon the Sorcerer's Puzzle Pack
|
Simon the Sorcerer's Puzzle Pack
|
||||||
- Swampy Adventures [swampy]
|
- Swampy Adventures [swampy]
|
||||||
The Feeble Files [feeble]
|
The Feeble Files [feeble]
|
||||||
|
|
||||||
|
GOB Games by Cocktel Vision:
|
||||||
|
Bargon Attack [bargon]
|
||||||
|
Gobliiins [gob1]
|
||||||
|
Gobliins 2 [gob2]
|
||||||
|
Goblins 3 [gob3]
|
||||||
|
Ween: The Prophecy [ween]
|
||||||
|
|
||||||
|
Other Games:
|
||||||
|
Beneath a Steel Sky [sky]
|
||||||
|
Broken Sword 1: The Shadow of the Templars [sword1]
|
||||||
|
Broken Sword 2: The Smoking Mirror [sword2]
|
||||||
|
Flight of the Amazon Queen [queen]
|
||||||
|
Future Wars [fw]
|
||||||
|
Inherit the Earth: Quest for the Orb [ite]
|
||||||
|
Nippon Safes Inc. [nippon]
|
||||||
The Legend of Kyrandia [kyra1]
|
The Legend of Kyrandia [kyra1]
|
||||||
Touche: The Adventures of the Fifth
|
Touche: The Adventures of the Fifth
|
||||||
Musketeer [touche]
|
Musketeer [touche]
|
||||||
|
@ -212,6 +240,7 @@ site and view the compatibility chart.
|
||||||
Backyard Soccer [soccer]
|
Backyard Soccer [soccer]
|
||||||
Blue's ABC Time [BluesABCTime]
|
Blue's ABC Time [BluesABCTime]
|
||||||
Blue's Birthday Adventure [BluesBirthday]
|
Blue's Birthday Adventure [BluesBirthday]
|
||||||
|
Elvira II - The Jaws of Cerberus [elvira2]
|
||||||
SPY Fox 3: Operation Ozone [spyozon]
|
SPY Fox 3: Operation Ozone [spyozon]
|
||||||
|
|
||||||
The following games are based on the SCUMM engine, but NOT supported
|
The following games are based on the SCUMM engine, but NOT supported
|
||||||
|
@ -361,20 +390,22 @@ the files appear on both CDs, but again they're identical.
|
||||||
3.7) Broken Sword notes:
|
3.7) Broken Sword notes:
|
||||||
---- -------------------
|
---- -------------------
|
||||||
Broken Sword 1 and 2 both come with in-game cutscenes compressed using
|
Broken Sword 1 and 2 both come with in-game cutscenes compressed using
|
||||||
RAD Game Tools legacy Smacker(tm) format. As RAD is unwilling to open
|
RAD Game Tools' legacy Smacker(tm) format. As RAD is unwilling to open
|
||||||
the older legacy versions of this format to us, and have requested we not
|
the older legacy versions of this format to us, and have requested we not
|
||||||
reverse engineer it, Revolution Software has kindly allowed us to provide
|
reverse engineer it, Revolution Software has kindly allowed us to provide
|
||||||
re-encoded Broken Sword cutscenes for download on our website:
|
re-encoded Broken Sword cutscenes for download on our website:
|
||||||
|
|
||||||
http://www.scummvm.org/downloads.php
|
http://www.scummvm.org/downloads.php
|
||||||
|
|
||||||
These cutscenes are provided in MPEG2 format with OGG Vorbis audio.
|
These cutscenes are provided in DXA format with FLAC audio. Their quality
|
||||||
Viewing these cutscenes thus requires a version of ScummVM compiled
|
is equal to the original games due to the use of lossless compression.
|
||||||
with both libmpeg2 (preferably 0.4.0 or greater) and libVorbis support.
|
Viewing these cutscenes requires a version of ScummVM compiled with both
|
||||||
|
FLAC and zLib support.
|
||||||
|
|
||||||
TODO
|
For systems that are too slow to handle the decoding of FLAC audio,
|
||||||
TODO: What about DXA??? Mention it here, too???
|
the audio for these cutscenes is provided separately as OGG Vorbis audio
|
||||||
TODO
|
too. Viewing these cutscenes with OGG Vorbis audio requires a version of
|
||||||
|
ScummVM compiled with both libVorbis and zLib support.
|
||||||
|
|
||||||
The cutscenes should be placed in the main game data directory. Note that
|
The cutscenes should be placed in the main game data directory. Note that
|
||||||
currently this requires either copying the game to hard disk or burning
|
currently this requires either copying the game to hard disk or burning
|
||||||
|
@ -493,11 +524,6 @@ due to reasons described above. The cutscenes have to be re-encoded to DXA,
|
||||||
which is the format used by the cutscenes in the Amiga and Macintosh versions.
|
which is the format used by the cutscenes in the Amiga and Macintosh versions.
|
||||||
See the tools README for a brief guide on converting the cutscenes.
|
See the tools README for a brief guide on converting the cutscenes.
|
||||||
|
|
||||||
TODO
|
|
||||||
TODO: Maybe we should add a section dedicated to Smacker and DXA, and refer
|
|
||||||
TODO to it from here, and also from section 3.7 (Broken Sword) ?
|
|
||||||
TODO
|
|
||||||
|
|
||||||
To use the speech files with ScummVM, they need to be renamed as follows:
|
To use the speech files with ScummVM, they need to be renamed as follows:
|
||||||
Rename voices.wav on CD1 to voices1.wav
|
Rename voices.wav on CD1 to voices1.wav
|
||||||
Rename voices.wav on CD2 to voices2.wav
|
Rename voices.wav on CD2 to voices2.wav
|
||||||
|
@ -511,7 +537,58 @@ To run The Legend of Kyrandia under ScummVM you need the 'kyra.dat' file,
|
||||||
which can be found on the 'Downloads' page of the ScummVM website.
|
which can be found on the 'Downloads' page of the ScummVM website.
|
||||||
|
|
||||||
|
|
||||||
3.15) Known Problems:
|
3.15) Sierra AGI games Predictive Input Dialog notes:
|
||||||
|
----- -----------------------------------------------
|
||||||
|
The Predictive Input Dialog is a ScummVM aid for running AGI engines games
|
||||||
|
(which notoriously require command line input) on devices with limited keyboard
|
||||||
|
support. In these situations since typing with emulated keyboards is quite
|
||||||
|
tedious, commands can be entered quickly and easily via the Predictive Input
|
||||||
|
Dialog.
|
||||||
|
|
||||||
|
In order to enable predictive input in AGI games, you need to copy the pred.dic
|
||||||
|
file in the ScummVM extras folder or the folder of the game you wish to play.
|
||||||
|
This dictionary has been created by parsing through all known AGI games and
|
||||||
|
contains the maximum set of common words.
|
||||||
|
|
||||||
|
If the dictionary is detected, the Predictive Input Dialog is displayed either
|
||||||
|
when you click on the command line area (wherever keyboard input is required,
|
||||||
|
even in dialog boxes), or in some ports by pressing a designated hot key.
|
||||||
|
|
||||||
|
The predictive input dialog operates in three modes, switchable by the
|
||||||
|
(*)Pre/123/Abc button. The primary input method is the predictive mode (Pre)
|
||||||
|
which resembles the way "fast typing" is performed at phones. The alphabet is
|
||||||
|
divided into 9 sets which naturally map to the 9 number keys of the numeric
|
||||||
|
keypad (0 is space). To type in a word, you press once the number of the set
|
||||||
|
which contains the letter of the word you intend to type, then move on to the
|
||||||
|
next. For example, to type the command 'look', you should press 5665. As you
|
||||||
|
gradually type the intended word's numeric code, the dictionary is accessed for
|
||||||
|
known words matching your input up to that point. As you press more keys, the
|
||||||
|
prediction converges to the correct word. This is why the printed word may
|
||||||
|
change dramatically between key presses. There exist situations though where
|
||||||
|
more than one words share the same numeric representation. For example the
|
||||||
|
words 'quit' and 'suit' map to the same number, namely 7848. In these cases the
|
||||||
|
(#)next button lights up. By pressing it, you can cycle through the list of
|
||||||
|
words sharing the same code and finally accept the correct one by pressing
|
||||||
|
(0)space or the Ok button.
|
||||||
|
|
||||||
|
The second input method (123) is the numeric input: Each key you press is
|
||||||
|
entered verbatim as a number.
|
||||||
|
|
||||||
|
The third input method (Abc) is the Multi-tap Alpha input mode. This mode is
|
||||||
|
intended for entering free text, without assistance from the dictionary scheme
|
||||||
|
of predictive (Pre) mode. The text is entered one letter at the time. For each
|
||||||
|
letter first press the number of the set which contains the letter you want,
|
||||||
|
then use the (#)next button to cycle through the letters and repeat with
|
||||||
|
another number. For example, to enter the word 'look' you must press the
|
||||||
|
following: 5##6##6##5#
|
||||||
|
|
||||||
|
The dialog is fully usable with the mouse, but a few provisions have been made
|
||||||
|
in some ScummVM ports to make its use more comfortable by naturally mapping the
|
||||||
|
functionality to the numeric keypad. Also, the dialog's buttons can be
|
||||||
|
navigated with the arrow and the enter keys.
|
||||||
|
|
||||||
|
|
||||||
|
3.16) Known Problems:
|
||||||
----- ---------------
|
----- ---------------
|
||||||
This release has the following known problems. There is no need to report them,
|
This release has the following known problems. There is no need to report them,
|
||||||
although patches to fix them are welcome. If you discover a bug that is not
|
although patches to fix them are welcome. If you discover a bug that is not
|
||||||
|
@ -578,7 +655,6 @@ the section on reporting bugs.
|
||||||
|
|
||||||
The Legend of Kyrandia:
|
The Legend of Kyrandia:
|
||||||
- Amiga versions aren't supported
|
- Amiga versions aren't supported
|
||||||
- FM-Towns version isn't supported
|
|
||||||
|
|
||||||
Humongous Entertainment games:
|
Humongous Entertainment games:
|
||||||
- No support for printing images
|
- No support for printing images
|
||||||
|
@ -595,7 +671,7 @@ Supported platforms include (but are not limited to):
|
||||||
|
|
||||||
UNIX (Linux, Solaris, IRIX, *BSD)
|
UNIX (Linux, Solaris, IRIX, *BSD)
|
||||||
Windows
|
Windows
|
||||||
Windows Mobile (iPAQ and other handheld devices)
|
Windows CE and Windows Mobile (including Smartphones and PocketPCs)
|
||||||
Mac OS X
|
Mac OS X
|
||||||
AmigaOS
|
AmigaOS
|
||||||
BeOS
|
BeOS
|
||||||
|
@ -870,7 +946,6 @@ other games.
|
||||||
Cmd-q - Quit (Mac OS X)
|
Cmd-q - Quit (Mac OS X)
|
||||||
Ctrl-q - Quit (other unices including Linux)
|
Ctrl-q - Quit (other unices including Linux)
|
||||||
Ctrl-z OR Alt-x - Quit (other platforms)
|
Ctrl-z OR Alt-x - Quit (other platforms)
|
||||||
Ctrl-f - Toggle fast mode
|
|
||||||
Ctrl-m - Toggle mouse capture
|
Ctrl-m - Toggle mouse capture
|
||||||
Ctrl-Alt 1-8 - Switch between graphics filters
|
Ctrl-Alt 1-8 - Switch between graphics filters
|
||||||
Ctrl-Alt + and - - Increase/Decrease the scale factor
|
Ctrl-Alt + and - - Increase/Decrease the scale factor
|
||||||
|
@ -886,6 +961,7 @@ other games.
|
||||||
SCUMM:
|
SCUMM:
|
||||||
Ctrl 0-9 and Alt 0-9 - Load and save game state
|
Ctrl 0-9 and Alt 0-9 - Load and save game state
|
||||||
Ctrl-d - Starts the debugger
|
Ctrl-d - Starts the debugger
|
||||||
|
Ctrl-f - Toggle fast mode
|
||||||
Ctrl-g - Runs in really REALLY fast mode
|
Ctrl-g - Runs in really REALLY fast mode
|
||||||
Ctrl-t - Switch between 'Speech only',
|
Ctrl-t - Switch between 'Speech only',
|
||||||
'Speech and Subtitles' and 'Subtitles only'
|
'Speech and Subtitles' and 'Subtitles only'
|
||||||
|
@ -908,13 +984,14 @@ other games.
|
||||||
|
|
||||||
Beneath a Steel Sky:
|
Beneath a Steel Sky:
|
||||||
Ctrl-d - Starts the debugger
|
Ctrl-d - Starts the debugger
|
||||||
|
Ctrl-f - Toggle fast mode
|
||||||
Ctrl-g - Runs in really REALLY fast mode
|
Ctrl-g - Runs in really REALLY fast mode
|
||||||
F5 - Displays a save/load box
|
F5 - Displays a save/load box
|
||||||
Escape - Skips the game intro
|
Escape - Skips the game intro
|
||||||
Period (.) - Skips current line of text
|
Period (.) - Skips current line of text
|
||||||
|
|
||||||
Broken Sword 1:
|
Broken Sword 1:
|
||||||
F5 or ESC - Displays save/load box
|
F5 or Escape - Displays save/load box
|
||||||
|
|
||||||
Broken Sword 2:
|
Broken Sword 2:
|
||||||
Ctrl-d - Starts the debugger
|
Ctrl-d - Starts the debugger
|
||||||
|
@ -924,18 +1001,37 @@ other games.
|
||||||
|
|
||||||
Flight of the Amazon Queen:
|
Flight of the Amazon Queen:
|
||||||
Ctrl-d - Starts the debugger
|
Ctrl-d - Starts the debugger
|
||||||
|
Ctrl-f - Toggle fast mode
|
||||||
F1 - Use Journal (saving/loading)
|
F1 - Use Journal (saving/loading)
|
||||||
F11 - Quicksave
|
F11 - Quicksave
|
||||||
F12 - Quickload
|
F12 - Quickload
|
||||||
Escape - Skips cutscenes
|
Escape - Skips cutscenes
|
||||||
Space - Skips current line of text
|
Space - Skips current line of text
|
||||||
|
|
||||||
|
Future Wars
|
||||||
|
F1 - Examine
|
||||||
|
F2 - Take
|
||||||
|
F3 - Inventory
|
||||||
|
F4 - Use
|
||||||
|
F5 - Activate
|
||||||
|
F6 - Speak
|
||||||
|
F9 - "Activate" menu
|
||||||
|
F10 - "Use" menu
|
||||||
|
Escape - Bring on command menu
|
||||||
|
|
||||||
|
Nippon Safes
|
||||||
|
Ctrl-d - Starts the debugger
|
||||||
|
l - Load game
|
||||||
|
s - Save game
|
||||||
|
|
||||||
Simon the Sorcerer 1 and 2:
|
Simon the Sorcerer 1 and 2:
|
||||||
Ctrl 0-9 and Alt 0-9 - Load and save game state
|
Ctrl 0-9 and Alt 0-9 - Load and save game state
|
||||||
Ctrl-d - Starts the debugger
|
Ctrl-d - Starts the debugger
|
||||||
|
Ctrl-f - Toggle fast mode
|
||||||
F1 - F3 - Text speed, faster - slower
|
F1 - F3 - Text speed, faster - slower
|
||||||
F10 - Shows all characters and objects you can
|
F10 - Shows all characters and objects you can
|
||||||
interact with
|
interact with
|
||||||
|
Escape - Skip cutscenes
|
||||||
- and + - Music volume, down/up
|
- and + - Music volume, down/up
|
||||||
m - Music on/off
|
m - Music on/off
|
||||||
s - Sound effects on/off
|
s - Sound effects on/off
|
||||||
|
@ -946,8 +1042,18 @@ other games.
|
||||||
combined speech and subtitles
|
combined speech and subtitles
|
||||||
[Simon the Sorcerer 2 only]
|
[Simon the Sorcerer 2 only]
|
||||||
|
|
||||||
|
Simon the Sorcerer's Puzzle Pack
|
||||||
|
Ctrl-d - Starts the debugger
|
||||||
|
Ctrl-f - Toggle fast mode
|
||||||
|
F12 - High speed mode on/off in Swampy Adventures
|
||||||
|
- and + - Music volume, down/up
|
||||||
|
m - Music on/off
|
||||||
|
s - Sound effects on/off
|
||||||
|
p - Pauses
|
||||||
|
|
||||||
The Feeble Files
|
The Feeble Files
|
||||||
Ctrl-d - Starts the debugger
|
Ctrl-d - Starts the debugger
|
||||||
|
Ctrl-f - Toggle fast mode
|
||||||
F7 - Switch characters
|
F7 - Switch characters
|
||||||
F9 - Hitbox names on/off
|
F9 - Hitbox names on/off
|
||||||
s - Sound effects on/off
|
s - Sound effects on/off
|
||||||
|
@ -961,11 +1067,20 @@ other games.
|
||||||
Ctrl 0-9 and Alt 0-9 - Load and save game state
|
Ctrl 0-9 and Alt 0-9 - Load and save game state
|
||||||
Ctrl-d - Starts the debugger
|
Ctrl-d - Starts the debugger
|
||||||
|
|
||||||
|
Touche: The Adventures of the Fifth Musketeer:
|
||||||
|
Ctrl-d - Starts the debugger
|
||||||
|
Ctrl-f - Toggle fast mode
|
||||||
|
F5 - Displays options
|
||||||
|
F9 - Turn fast walk mode on
|
||||||
|
F10 - Turn fast walk mode off
|
||||||
|
Escape - Quit
|
||||||
|
Space - Skips current line of text
|
||||||
|
t - Switch between 'Voice only',
|
||||||
|
'Voice and Text' and 'Text only'
|
||||||
|
|
||||||
Note that using ctrl-f or ctrl-g is not recommended: games can crash when
|
Note that using ctrl-f or ctrl-g is not recommended: games can crash when
|
||||||
being run faster than their normal speed, as scripts will lose synchronisation.
|
being run faster than their normal speed, as scripts will lose synchronisation.
|
||||||
|
|
||||||
Ctrl-f is not supported by the Broken Sword games.
|
|
||||||
|
|
||||||
Note for WinCE users: Due to the limited keyboard input in most devices, a
|
Note for WinCE users: Due to the limited keyboard input in most devices, a
|
||||||
small subset of these hot keys are supported via key remapping and/or panel
|
small subset of these hot keys are supported via key remapping and/or panel
|
||||||
actions. Please consult the README-WinCE.txt file.
|
actions. Please consult the README-WinCE.txt file.
|
||||||
|
@ -1259,7 +1374,7 @@ filesize -- 1152 seems to be a good value for those kind of soundfiles. Be sure
|
||||||
to read the encoder documentation before you use other values.
|
to read the encoder documentation before you use other values.
|
||||||
|
|
||||||
|
|
||||||
7.7.6) Compressing sfx/speech in Simon the Sorcerer and The Feeble Files
|
7.7.6) Compressing music/sfx/speech in AGOS games
|
||||||
------ -----------------------------------------------------------------
|
------ -----------------------------------------------------------------
|
||||||
Use our compress_agos utility from the scummvm-tools package to perform this
|
Use our compress_agos utility from the scummvm-tools package to perform this
|
||||||
task. You can choose between multiple target formats, but note that you can
|
task. You can choose between multiple target formats, but note that you can
|
||||||
|
@ -1280,6 +1395,8 @@ enabled.
|
||||||
compress_agos voices3.wav (For Windows 4CD version of Feeble)
|
compress_agos voices3.wav (For Windows 4CD version of Feeble)
|
||||||
compress_agos voices4.wav (For Windows 4CD version of Feeble)
|
compress_agos voices4.wav (For Windows 4CD version of Feeble)
|
||||||
|
|
||||||
|
compress_agos Music (For Windows version of Puzzle Pack)
|
||||||
|
|
||||||
For Ogg Vorbis add --vorbis to the options, i.e.
|
For Ogg Vorbis add --vorbis to the options, i.e.
|
||||||
|
|
||||||
compress_agos --vorbis
|
compress_agos --vorbis
|
||||||
|
@ -1531,38 +1648,36 @@ 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
|
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).
|
messages (see http://www.sysinternals.com/ntw2k/freeware/debugview.shtml).
|
||||||
|
|
||||||
TODO
|
|
||||||
TODO: The following lists is partially outdated, and incomplete.
|
|
||||||
TODO We could either try to update it, and/or refer to the relevant
|
|
||||||
TODO Wiki pages...
|
|
||||||
TODO
|
|
||||||
|
|
||||||
GCC:
|
GCC and MinGW32:
|
||||||
* Type ./configure
|
* Type "./configure"
|
||||||
* Type make (or gmake, or gnumake, depending on what GNU make is
|
* Type "make" (or "gmake", or "gnumake", depending on what GNU make is
|
||||||
called on your system) and hopefully ScummVM will compile for you.
|
called on your system) and hopefully ScummVM will compile for you.
|
||||||
|
* For more information refer to:
|
||||||
|
http://wiki.scummvm.org/index.php/Compiling_ScummVM/GCC
|
||||||
|
respectively
|
||||||
|
http://wiki.scummvm.org/index.php/Compiling_ScummVM/MinGW
|
||||||
|
|
||||||
Microsoft Visual C++ 6.0:
|
Microsoft Visual C++ 6.0:
|
||||||
* Open the workspace, scummwm.dsw
|
* Open the workspace file "scummwm.dsw" in the "dists\msvc6" folder.
|
||||||
* Enter the path to the needed libraries and includes in
|
* Enter the path to the needed libraries and includes in
|
||||||
Tools|Options|Directories
|
"Tools|Options|Directories".
|
||||||
* Now it should compile successfully.
|
* Now it should compile successfully.
|
||||||
|
* For more information refer to:
|
||||||
|
http://wiki.scummvm.org/index.php/Compiling_ScummVM/VS2005
|
||||||
|
|
||||||
Microsoft Visual C++ 7.0:
|
Microsoft Visual C++ 7.0/8.0:
|
||||||
* Open the solution file scummwm.sln
|
* Open the solution file "scummwm.sln" in the "dists\msvc7"
|
||||||
|
respectively "dists\msvc8" folder.
|
||||||
* Enter the path to the needed libraries and includes in
|
* Enter the path to the needed libraries and includes in
|
||||||
Tools|Options|Projects|VC++ Directories
|
Tools|Options|Projects|VC++ Directories".
|
||||||
* Now it should compile successfully.
|
* Now it should compile successfully.
|
||||||
|
* For more information refer to:
|
||||||
|
http://wiki.scummvm.org/index.php/Compiling_ScummVM/VS2005
|
||||||
|
|
||||||
Windows Mobile with Microsoft eMbedded Visual C++ 3 or 4 :
|
Windows Mobile:
|
||||||
* Download SDL with additional Windows Mobile tweaks:
|
* Please refer to:
|
||||||
http://arisme.free.fr/ports/SDL.php
|
http://wiki.scummvm.org/index.php/Compiling_ScummVM/Windows_CE
|
||||||
* Download additional third party libraries:
|
|
||||||
http://arisme.free.fr/ports
|
|
||||||
* Modify your include and library paths accordingly in EVC3/EVC4.
|
|
||||||
* Open the ScummVM project dists\msevc4\PocketSCUMM.vcw
|
|
||||||
* Modify the libraries and config parameters if necessary.
|
|
||||||
* Now it should compile successfully.
|
|
||||||
|
|
||||||
Debian GNU/Linux:
|
Debian GNU/Linux:
|
||||||
* Install the packages 'build-essential', 'fakeroot', 'debhelper',
|
* Install the packages 'build-essential', 'fakeroot', 'debhelper',
|
||||||
|
@ -1581,12 +1696,14 @@ TODO
|
||||||
way to get that is to install SDL via Fink (http://fink.sf.net).
|
way to get that is to install SDL via Fink (http://fink.sf.net).
|
||||||
Alternatively you could compile SDL manually from source using its
|
Alternatively you could compile SDL manually from source using its
|
||||||
unix build system (configure && make).
|
unix build system (configure && make).
|
||||||
* Type ./configure in the ScummVM directory
|
* Type "./configure" in the ScummVM directory.
|
||||||
* You can now type 'make' to create a command line binary.
|
* You can now type 'make' to create a command line binary.
|
||||||
* To get a version you can run from Finder, type 'make bundle' which
|
* To get a version you can run from Finder, type 'make bundle' which
|
||||||
will create ScummVM.app (this only works out of the box if you
|
will create ScummVM.app (this only works out of the box if you
|
||||||
installed SDL into /sw (as happens if you are using Fink). If you
|
installed SDL into /sw (as happens if you are using Fink). If you
|
||||||
have installed SDL in another way, you will have to edit the Makefile).
|
have installed SDL in another way, you will have to edit the Makefile).
|
||||||
|
* For more information refer to:
|
||||||
|
http://wiki.scummvm.org/index.php/Compiling_ScummVM/MacOS_X_Crosscompiling
|
||||||
|
|
||||||
AmigaOS 4 (Cross-compiling with Cygwin):
|
AmigaOS 4 (Cross-compiling with Cygwin):
|
||||||
* Make sure that you have SDL installed, you may also need
|
* Make sure that you have SDL installed, you may also need
|
||||||
|
|
|
@ -106,7 +106,7 @@ bool DefaultEventManager::pollEvent(Common::Event &event) {
|
||||||
event.type = Common::EVENT_KEYDOWN;
|
event.type = Common::EVENT_KEYDOWN;
|
||||||
event.synthetic = true;
|
event.synthetic = true;
|
||||||
event.kbd.ascii = _currentKeyDown.ascii;
|
event.kbd.ascii = _currentKeyDown.ascii;
|
||||||
event.kbd.keycode = _currentKeyDown.keycode;
|
event.kbd.keycode = (Common::KeyCode)_currentKeyDown.keycode;
|
||||||
event.kbd.flags = _currentKeyDown.flags;
|
event.kbd.flags = _currentKeyDown.flags;
|
||||||
_keyRepeatTime = time + kKeyRepeatSustainDelay;
|
_keyRepeatTime = time + kKeyRepeatSustainDelay;
|
||||||
result = true;
|
result = true;
|
||||||
|
|
|
@ -93,72 +93,136 @@ bool OSystem_PalmBase::pollEvent(Common::Event &event) {
|
||||||
sound_handler();
|
sound_handler();
|
||||||
|
|
||||||
for(;;) {
|
for(;;) {
|
||||||
|
// check for hardkey repeat for mouse emulation
|
||||||
|
keyCurrentState = KeyCurrentState();
|
||||||
|
|
||||||
// if it was a key pressed, let the keyup event raise
|
// if it was a key pressed, let the keyup event raise
|
||||||
if (_wasKey) {
|
if (_keyExtraPressed) {
|
||||||
// check for hardkey repeat for mouse emulation
|
if (gVars->arrowKeys) {
|
||||||
keyCurrentState = KeyCurrentState();
|
if (_keyExtraPressed & _keyExtra.bitLeft) {
|
||||||
|
if (!(keyCurrentState & _keyExtra.bitLeft)) {
|
||||||
if (!(keyCurrentState & _keyExtraMask)) {
|
_keyExtraPressed &= ~_keyExtra.bitLeft;
|
||||||
_lastKeyRepeat = 0;
|
|
||||||
|
|
||||||
} else if (getMillis() >= (_keyExtraRepeat + _keyExtraDelay)) {
|
|
||||||
_keyExtraRepeat = getMillis();
|
|
||||||
|
|
||||||
if (gVars->arrowKeys) {
|
|
||||||
/* if HARD_KEY(Up, chrUpArrow)
|
|
||||||
else if HARD_KEY(Down, chrDownArrow)
|
|
||||||
else if HARD_KEY(Left, chrLeftArrow)
|
|
||||||
else if HARD_KEY(Right, chrRightArrow)
|
|
||||||
*/
|
|
||||||
} else {
|
|
||||||
// button released ?
|
|
||||||
if (_keyExtraPressed) {
|
|
||||||
if (_keyExtraPressed & _keyExtra.bitActionA) {
|
|
||||||
if (!(keyCurrentState & _keyExtra.bitActionA)) {
|
|
||||||
_keyExtraPressed &= ~_keyExtra.bitActionA;
|
|
||||||
|
|
||||||
event.type = Common::EVENT_LBUTTONUP;
|
|
||||||
event.mouse.x = _mouseCurState.x;
|
|
||||||
event.mouse.y = _mouseCurState.y;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_keyExtraPressed & _keyExtra.bitActionB) {
|
|
||||||
if (!(keyCurrentState & _keyExtra.bitActionB)) {
|
|
||||||
_keyExtraPressed &= ~_keyExtra.bitActionB;
|
|
||||||
|
|
||||||
event.type = Common::EVENT_RBUTTONUP;
|
|
||||||
event.mouse.x = _mouseCurState.x;
|
|
||||||
event.mouse.y = _mouseCurState.y;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Int8 sx = 0;
|
|
||||||
Int8 sy = 0;
|
|
||||||
|
|
||||||
if (keyCurrentState & _keyExtra.bitUp)
|
|
||||||
sy = -1;
|
|
||||||
else if (keyCurrentState & _keyExtra.bitDown)
|
|
||||||
sy = +1;
|
|
||||||
|
|
||||||
if (keyCurrentState & _keyExtra.bitLeft)
|
|
||||||
sx = -1;
|
|
||||||
else if (keyCurrentState & _keyExtra.bitRight)
|
|
||||||
sx = +1;
|
|
||||||
|
|
||||||
if (sx || sy) {
|
|
||||||
simulate_mouse(event, sx, sy, &x, &y);
|
|
||||||
event.type = Common::EVENT_MOUSEMOVE;
|
|
||||||
event.mouse.x = x;
|
|
||||||
event.mouse.y = y;
|
|
||||||
warpMouse(x, y);
|
|
||||||
|
|
||||||
|
event.type = Common::EVENT_KEYUP;
|
||||||
|
event.kbd.keycode = Common::KEYCODE_LEFT;
|
||||||
|
event.kbd.ascii = event.kbd.keycode;
|
||||||
|
event.kbd.flags = 0;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (_keyExtraPressed & _keyExtra.bitRight) {
|
||||||
|
if (!(keyCurrentState & _keyExtra.bitRight)) {
|
||||||
|
_keyExtraPressed &= ~_keyExtra.bitRight;
|
||||||
|
|
||||||
|
event.type = Common::EVENT_KEYUP;
|
||||||
|
event.kbd.keycode = Common::KEYCODE_RIGHT;
|
||||||
|
event.kbd.ascii = event.kbd.keycode;
|
||||||
|
event.kbd.flags = 0;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_keyExtraPressed & _keyExtra.bitUp) {
|
||||||
|
if (!(keyCurrentState & _keyExtra.bitUp)) {
|
||||||
|
_keyExtraPressed &= ~_keyExtra.bitUp;
|
||||||
|
|
||||||
|
event.type = Common::EVENT_KEYUP;
|
||||||
|
event.kbd.keycode = Common::KEYCODE_UP;
|
||||||
|
event.kbd.ascii = event.kbd.keycode;
|
||||||
|
event.kbd.flags = 0;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_keyExtraPressed & _keyExtra.bitDown) {
|
||||||
|
if (!(keyCurrentState & _keyExtra.bitDown)) {
|
||||||
|
_keyExtraPressed &= ~_keyExtra.bitDown;
|
||||||
|
|
||||||
|
event.type = Common::EVENT_KEYUP;
|
||||||
|
event.kbd.keycode = Common::KEYCODE_DOWN;
|
||||||
|
event.kbd.ascii = event.kbd.keycode;
|
||||||
|
event.kbd.flags = 0;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_keyExtraPressed & _keyExtra.bitActionA) {
|
||||||
|
if (!(keyCurrentState & _keyExtra.bitActionA)) {
|
||||||
|
_keyExtraPressed &= ~_keyExtra.bitActionA;
|
||||||
|
|
||||||
|
event.type = Common::EVENT_LBUTTONUP;
|
||||||
|
event.mouse.x = _mouseCurState.x;
|
||||||
|
event.mouse.y = _mouseCurState.y;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_keyExtraPressed & _keyExtra.bitActionB) {
|
||||||
|
if (!(keyCurrentState & _keyExtra.bitActionB)) {
|
||||||
|
_keyExtraPressed &= ~_keyExtra.bitActionB;
|
||||||
|
|
||||||
|
event.type = Common::EVENT_RBUTTONUP;
|
||||||
|
event.mouse.x = _mouseCurState.x;
|
||||||
|
event.mouse.y = _mouseCurState.y;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// no more event till up is raised
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(keyCurrentState & _keyExtraMask)) {
|
||||||
|
_lastKeyRepeat = 0;
|
||||||
|
|
||||||
|
} else if (getMillis() >= (_keyExtraRepeat + _keyExtraDelay)) {
|
||||||
|
_keyExtraRepeat = getMillis();
|
||||||
|
|
||||||
|
if (gVars->arrowKeys) {
|
||||||
|
if (keyCurrentState & _keyExtra.bitLeft) {
|
||||||
|
_keyExtraPressed |= _keyExtra.bitLeft;
|
||||||
|
event.kbd.keycode = Common::KEYCODE_LEFT;
|
||||||
|
|
||||||
|
} else if (keyCurrentState & _keyExtra.bitRight) {
|
||||||
|
_keyExtraPressed |= _keyExtra.bitRight;
|
||||||
|
event.kbd.keycode = Common::KEYCODE_RIGHT;
|
||||||
|
|
||||||
|
} else if (keyCurrentState & _keyExtra.bitUp) {
|
||||||
|
_keyExtraPressed |= _keyExtra.bitUp;
|
||||||
|
event.kbd.keycode = Common::EVENT_KEYUP;
|
||||||
|
|
||||||
|
} else if (keyCurrentState & _keyExtra.bitDown) {
|
||||||
|
_keyExtraPressed |= _keyExtra.bitDown;
|
||||||
|
event.kbd.keycode = Common::KEYCODE_DOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
event.type = Common::EVENT_KEYDOWN;
|
||||||
|
event.kbd.ascii = event.kbd.keycode;
|
||||||
|
event.kbd.flags = 0;
|
||||||
|
return true;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
Int8 sx = 0;
|
||||||
|
Int8 sy = 0;
|
||||||
|
|
||||||
|
if (keyCurrentState & _keyExtra.bitUp)
|
||||||
|
sy = -1;
|
||||||
|
else if (keyCurrentState & _keyExtra.bitDown)
|
||||||
|
sy = +1;
|
||||||
|
|
||||||
|
if (keyCurrentState & _keyExtra.bitLeft)
|
||||||
|
sx = -1;
|
||||||
|
else if (keyCurrentState & _keyExtra.bitRight)
|
||||||
|
sx = +1;
|
||||||
|
|
||||||
|
if (sx || sy) {
|
||||||
|
simulate_mouse(event, sx, sy, &x, &y);
|
||||||
|
event.type = Common::EVENT_MOUSEMOVE;
|
||||||
|
event.mouse.x = x;
|
||||||
|
event.mouse.y = y;
|
||||||
|
warpMouse(x, y);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -174,13 +238,13 @@ bool OSystem_PalmBase::pollEvent(Common::Event &event) {
|
||||||
|
|
||||||
// arrow keys
|
// arrow keys
|
||||||
case chrUpArrow:
|
case chrUpArrow:
|
||||||
k = 273; break;
|
k = Common::KEYCODE_UP; break;
|
||||||
case chrDownArrow:
|
case chrDownArrow:
|
||||||
k = 274; break;
|
k = Common::KEYCODE_DOWN; break;
|
||||||
case chrLeftArrow:
|
|
||||||
k = 275; break;
|
|
||||||
case chrRightArrow:
|
case chrRightArrow:
|
||||||
k = 276; break;
|
k = Common::KEYCODE_RIGHT; break;
|
||||||
|
case chrLeftArrow:
|
||||||
|
k = Common::KEYCODE_LEFT; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (k) {
|
if (k) {
|
||||||
|
@ -197,16 +261,16 @@ bool OSystem_PalmBase::pollEvent(Common::Event &event) {
|
||||||
// ESC key
|
// ESC key
|
||||||
case vchrLaunch:
|
case vchrLaunch:
|
||||||
event.type = Common::EVENT_KEYDOWN;
|
event.type = Common::EVENT_KEYDOWN;
|
||||||
event.kbd.keycode = 27;
|
event.kbd.keycode = Common::KEYCODE_ESCAPE;
|
||||||
event.kbd.ascii = 27;
|
event.kbd.ascii = Common::ASCII_ESCAPE;
|
||||||
event.kbd.flags = 0;
|
event.kbd.flags = 0;
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
// F5 = menu
|
// F5 = menu
|
||||||
case vchrMenu:
|
case vchrMenu:
|
||||||
event.type = Common::EVENT_KEYDOWN;
|
event.type = Common::EVENT_KEYDOWN;
|
||||||
event.kbd.keycode = 319;
|
event.kbd.keycode = Common::KEYCODE_F5;
|
||||||
event.kbd.ascii = 319;
|
event.kbd.ascii = Common::ASCII_F5;
|
||||||
event.kbd.flags = 0;
|
event.kbd.flags = 0;
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
@ -222,13 +286,13 @@ bool OSystem_PalmBase::pollEvent(Common::Event &event) {
|
||||||
|
|
||||||
// arrow keys
|
// arrow keys
|
||||||
case chrUpArrow:
|
case chrUpArrow:
|
||||||
k = 273; break;
|
k = Common::KEYCODE_UP; break;
|
||||||
case chrDownArrow:
|
case chrDownArrow:
|
||||||
k = 274; break;
|
k = Common::KEYCODE_DOWN; break;
|
||||||
case chrLeftArrow:
|
|
||||||
k = 275; break;
|
|
||||||
case chrRightArrow:
|
case chrRightArrow:
|
||||||
k = 276; break;
|
k = Common::KEYCODE_RIGHT; break;
|
||||||
|
case chrLeftArrow:
|
||||||
|
k = Common::KEYCODE_LEFT; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (k) {
|
if (k) {
|
||||||
|
@ -249,13 +313,11 @@ bool OSystem_PalmBase::pollEvent(Common::Event &event) {
|
||||||
((ev.data.keyDown.chr == vchrAttnStateChanged) ||
|
((ev.data.keyDown.chr == vchrAttnStateChanged) ||
|
||||||
(ev.data.keyDown.chr == vchrAttnUnsnooze)));
|
(ev.data.keyDown.chr == vchrAttnUnsnooze)));
|
||||||
|
|
||||||
|
|
||||||
// graffiti strokes, auto-off, etc...
|
// graffiti strokes, auto-off, etc...
|
||||||
if (!handled)
|
if (!handled)
|
||||||
if (SysHandleEvent(&ev))
|
if (SysHandleEvent(&ev))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
||||||
switch(ev.eType) {
|
switch(ev.eType) {
|
||||||
case penMoveEvent:
|
case penMoveEvent:
|
||||||
get_coordinates(&ev, x, y);
|
get_coordinates(&ev, x, y);
|
||||||
|
@ -349,8 +411,13 @@ bool OSystem_PalmBase::pollEvent(Common::Event &event) {
|
||||||
|
|
||||||
// F1 -> F10 key
|
// F1 -> F10 key
|
||||||
if (key >= '0' && key <= '9' && mask == (Common::KBD_CTRL|Common::KBD_ALT)) {
|
if (key >= '0' && key <= '9' && mask == (Common::KBD_CTRL|Common::KBD_ALT)) {
|
||||||
key = (key == '0') ? 324 : (315 + key - '1');
|
key = (key - '0' + 10 - 1) % 10; // '0' -> 9, '1' -> 0, '2' -> 1, ...
|
||||||
mask = 0;
|
_wasKey = true;
|
||||||
|
event.type = Common::EVENT_KEYDOWN;
|
||||||
|
event.kbd.keycode = Common::KEYCODE_F1 + key;
|
||||||
|
event.kbd.ascii = Common::ASCII_F1 + key;
|
||||||
|
event.kbd.flags = 0;
|
||||||
|
return true;
|
||||||
|
|
||||||
#ifdef STDLIB_TRACE_MEMORY
|
#ifdef STDLIB_TRACE_MEMORY
|
||||||
// print memory
|
// print memory
|
||||||
|
|
|
@ -110,6 +110,8 @@ private:
|
||||||
typedef void (OSystem_PalmOS5::*RendererProc)(RectangleType &r, PointType &p);
|
typedef void (OSystem_PalmOS5::*RendererProc)(RectangleType &r, PointType &p);
|
||||||
RendererProc _render;
|
RendererProc _render;
|
||||||
|
|
||||||
|
Graphics::Surface _framebuffer;
|
||||||
|
|
||||||
OverlayColor *_overlayP;
|
OverlayColor *_overlayP;
|
||||||
WinHandle _overlayH, _workScreenH;
|
WinHandle _overlayH, _workScreenH;
|
||||||
int16 *_workScreenP;
|
int16 *_workScreenP;
|
||||||
|
@ -131,8 +133,7 @@ private:
|
||||||
void calc_scale();
|
void calc_scale();
|
||||||
|
|
||||||
void render_landscapeAny(RectangleType &r, PointType &p);
|
void render_landscapeAny(RectangleType &r, PointType &p);
|
||||||
void render_landscape(RectangleType &r, PointType &p);
|
void render_landscape15x(RectangleType &r, PointType &p);
|
||||||
void render_portrait(RectangleType &r, PointType &p);
|
|
||||||
void render_1x(RectangleType &r, PointType &p);
|
void render_1x(RectangleType &r, PointType &p);
|
||||||
WinHandle alloc_screen(Coord w, Coord h);
|
WinHandle alloc_screen(Coord w, Coord h);
|
||||||
virtual void draw_osd(UInt16 id, Int32 x, Int32 y, Boolean show, UInt8 color = 0);
|
virtual void draw_osd(UInt16 id, Int32 x, Int32 y, Boolean show, UInt8 color = 0);
|
||||||
|
@ -169,7 +170,8 @@ public:
|
||||||
|
|
||||||
void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h);
|
void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h);
|
||||||
void clearScreen();
|
void clearScreen();
|
||||||
bool grabRawScreen(Graphics::Surface *surf);
|
virtual Graphics::Surface *lockScreen();
|
||||||
|
virtual void unlockScreen();
|
||||||
|
|
||||||
void setCursorPalette(const byte *colors, uint start, uint num);
|
void setCursorPalette(const byte *colors, uint start, uint num);
|
||||||
void disableCursorPalette(bool disable);
|
void disableCursorPalette(bool disable);
|
||||||
|
|
|
@ -28,7 +28,8 @@
|
||||||
#include "formUtil.h"
|
#include "formUtil.h"
|
||||||
#include "games.h"
|
#include "games.h"
|
||||||
#include "start.h"
|
#include "start.h"
|
||||||
#include "common/util.h"
|
|
||||||
|
#define ARRAYSIZE(x) ((int)(sizeof(x) / sizeof(x[0])))
|
||||||
|
|
||||||
static Char **items = NULL;
|
static Char **items = NULL;
|
||||||
Int16 selectedEngine = -1;
|
Int16 selectedEngine = -1;
|
||||||
|
|
|
@ -186,14 +186,14 @@ static const struct {
|
||||||
{ "cine", "Delphine Cinematique v1.0" },
|
{ "cine", "Delphine Cinematique v1.0" },
|
||||||
{ "queen", "Flight of the Amazon Queen" },
|
{ "queen", "Flight of the Amazon Queen" },
|
||||||
{ "lure", "Lure of the Tempress" },
|
{ "lure", "Lure of the Tempress" },
|
||||||
{ "gob", "Gobliiins, Bargon Attack and more ..." },
|
{ "gob", "Gobliiins, Bargon Attack and more" },
|
||||||
{ "kyra", "Kyrandia" },
|
{ "kyra", "Kyrandia" },
|
||||||
{ "parallaction", "Parallaction" },
|
{ "parallaction", "Parallaction" },
|
||||||
{ "saga", "SAGA Engine" },
|
{ "saga", "SAGA Engine" },
|
||||||
{ "scumm", "Scumm Games" },
|
{ "scumm", "Scumm Games" },
|
||||||
{ "agi", "Sierra AGI" },
|
{ "agi", "Sierra AGI" },
|
||||||
{ "touche", "Touche: The Adventures of the Fifth Musketeer" },
|
{ "touche", "Touche: The Adventures of the Fifth Musketeer" },
|
||||||
{ "cruise", "Cruise for a Corpse" },
|
{ "cruise", "Beta -> Cruise for a Corpse" },
|
||||||
};
|
};
|
||||||
|
|
||||||
// protos
|
// protos
|
||||||
|
|
|
@ -137,9 +137,13 @@ void OSystem_PalmOS5::hotswap_gfx_mode(int mode) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_stretched) {
|
if (_stretched) {
|
||||||
calc_scale();
|
|
||||||
OPTIONS_SET(kOptDisableOnScrDisp);
|
OPTIONS_SET(kOptDisableOnScrDisp);
|
||||||
_render = &OSystem_PalmOS5::render_landscapeAny;
|
if (_screenHeight == 200 && _screenDest.h == 300) {
|
||||||
|
_render = &OSystem_PalmOS5::render_landscape15x;
|
||||||
|
} else {
|
||||||
|
_render = &OSystem_PalmOS5::render_landscapeAny;
|
||||||
|
calc_scale();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
OPTIONS_RST(kOptDisableOnScrDisp);
|
OPTIONS_RST(kOptDisableOnScrDisp);
|
||||||
_render = &OSystem_PalmOS5::render_1x;
|
_render = &OSystem_PalmOS5::render_1x;
|
||||||
|
@ -215,13 +219,18 @@ void OSystem_PalmOS5::copyRectToScreen(const byte *buf, int pitch, int x, int y,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OSystem_PalmOS5::grabRawScreen(Graphics::Surface *surf) {
|
Graphics::Surface *OSystem_PalmOS5::lockScreen() {
|
||||||
assert(surf);
|
_framebuffer.pixels = _offScreenP;
|
||||||
|
_framebuffer.w = _screenWidth;
|
||||||
|
_framebuffer.h = _screenHeight;
|
||||||
|
_framebuffer.pitch = _screenWidth;
|
||||||
|
_framebuffer.bytesPerPixel = 1;
|
||||||
|
|
||||||
surf->create(_screenWidth, _screenHeight, 1);
|
return &_framebuffer;
|
||||||
MemMove(surf->pixels, _offScreenP, _screenWidth * _screenHeight);
|
}
|
||||||
|
|
||||||
return true;
|
void OSystem_PalmOS5::unlockScreen() {
|
||||||
|
// The screen is always completely update anyway, so we don't have to force a full update here.
|
||||||
}
|
}
|
||||||
|
|
||||||
void OSystem_PalmOS5::int_updateScreen() {
|
void OSystem_PalmOS5::int_updateScreen() {
|
||||||
|
|
|
@ -76,3 +76,43 @@ void OSystem_PalmOS5::render_landscapeAny(RectangleType &r, PointType &p) {
|
||||||
p.y = _screenOffset.y + o;
|
p.y = _screenOffset.y + o;
|
||||||
RctSetRectangle(&r, 0, 0, _screenDest.w, _screenDest.h - o);
|
RctSetRectangle(&r, 0, 0, _screenDest.w, _screenDest.h - o);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OSystem_PalmOS5::render_landscape15x(RectangleType &r, PointType &p) {
|
||||||
|
Coord x, y, o = 0;
|
||||||
|
int16 *dst = _workScreenP;
|
||||||
|
|
||||||
|
if (_overlayVisible) {
|
||||||
|
int16 *src = _overlayP;
|
||||||
|
|
||||||
|
for (y = 0; y < 100; y++) {
|
||||||
|
// draw 2 lines
|
||||||
|
for (x = 0; x < 320; x++) {
|
||||||
|
*dst++ = *src++;
|
||||||
|
*dst++ = *src;
|
||||||
|
*dst++ = *src++;
|
||||||
|
}
|
||||||
|
// copy the second to the next line
|
||||||
|
MemMove(dst, dst - 480, 480 * 2);
|
||||||
|
dst += 480;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
byte *src = _offScreenP;
|
||||||
|
o = _current_shake_pos;
|
||||||
|
|
||||||
|
for (y = 0; y < 100; y++) {
|
||||||
|
// draw 2 lines
|
||||||
|
for (x = 0; x < 320; x++) {
|
||||||
|
*dst++ = _nativePal[*src++];
|
||||||
|
*dst++ = _nativePal[*src];
|
||||||
|
*dst++ = _nativePal[*src++];
|
||||||
|
}
|
||||||
|
// copy the second to the next line
|
||||||
|
MemMove(dst, dst - 480, 480 * 2);
|
||||||
|
dst += 480;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
p.x = _screenOffset.x;
|
||||||
|
p.y = _screenOffset.y + o;
|
||||||
|
RctSetRectangle(&r, 0, 0, 480, 300 - o);
|
||||||
|
}
|
||||||
|
|
|
@ -46,8 +46,8 @@ bool OSystem_PalmZodiac::check_event(Common::Event &event, EventPtr ev) {
|
||||||
// F5 = menu
|
// F5 = menu
|
||||||
case vchrThumbWheelBack:
|
case vchrThumbWheelBack:
|
||||||
event.type = Common::EVENT_KEYDOWN;
|
event.type = Common::EVENT_KEYDOWN;
|
||||||
event.kbd.keycode = 319;
|
event.kbd.keycode = Common::KEYCODE_F5;
|
||||||
event.kbd.ascii = 319;
|
event.kbd.ascii = Common::ASCII_F5;
|
||||||
event.kbd.flags = 0;
|
event.kbd.flags = 0;
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
|
|
@ -81,8 +81,8 @@ class OSystem_Dreamcast : public OSystem {
|
||||||
// The screen will not be updated to reflect the new bitmap
|
// The screen will not be updated to reflect the new bitmap
|
||||||
void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h);
|
void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h);
|
||||||
|
|
||||||
// Copies the current screen contents to a new surface.
|
virtual Graphics::Surface *lockScreen();
|
||||||
bool grabRawScreen(Graphics::Surface *surf);
|
virtual void unlockScreen();
|
||||||
|
|
||||||
// Clear the screen to black.
|
// Clear the screen to black.
|
||||||
void clearScreen();
|
void clearScreen();
|
||||||
|
@ -213,6 +213,8 @@ class OSystem_Dreamcast : public OSystem {
|
||||||
void *ovl_tx[NUM_BUFFERS];
|
void *ovl_tx[NUM_BUFFERS];
|
||||||
unsigned short palette[256], cursor_palette[256];
|
unsigned short palette[256], cursor_palette[256];
|
||||||
|
|
||||||
|
Graphics::Surface _framebuffer;
|
||||||
|
|
||||||
int temp_sound_buffer[RING_BUFFER_SAMPLES>>SOUND_BUFFER_SHIFT];
|
int temp_sound_buffer[RING_BUFFER_SAMPLES>>SOUND_BUFFER_SHIFT];
|
||||||
|
|
||||||
void checkSound();
|
void checkSound();
|
||||||
|
|
|
@ -609,19 +609,24 @@ int OSystem_Dreamcast::getGraphicsMode() const
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OSystem_Dreamcast::grabRawScreen(Graphics::Surface *surf)
|
Graphics::Surface *OSystem_Dreamcast::lockScreen()
|
||||||
{
|
{
|
||||||
if(!screen || !surf)
|
if (!screen)
|
||||||
return false;
|
return 0;
|
||||||
|
|
||||||
surf->create(_screen_w, _screen_h, 1);
|
_framebuffer.pixels = screen;
|
||||||
unsigned char *src = screen, *dst = (unsigned char *)surf->pixels;
|
_framebuffer.w = _screen_w;
|
||||||
for(int h = _screen_h; h>0; --h) {
|
_framebuffer.h = _screen_h;
|
||||||
memcpy(dst, src, _screen_w);
|
_framebuffer.pitch = SCREEN_W;
|
||||||
src += SCREEN_W;
|
_framebuffer.bytesPerPixel = 1;
|
||||||
dst += _screen_w;
|
|
||||||
}
|
return &_framebuffer;
|
||||||
return true;
|
}
|
||||||
|
|
||||||
|
void OSystem_Dreamcast::unlockScreen()
|
||||||
|
{
|
||||||
|
// Force screen update
|
||||||
|
_screen_dirty = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OSystem_Dreamcast::clearScreen()
|
void OSystem_Dreamcast::clearScreen()
|
||||||
|
|
|
@ -48,7 +48,7 @@ int handleInput(struct mapledev *pad, int &mouse_x, int &mouse_y,
|
||||||
if(!(buttons & 4)) lmb++;
|
if(!(buttons & 4)) lmb++;
|
||||||
if(!(buttons & 2)) rmb++;
|
if(!(buttons & 2)) rmb++;
|
||||||
|
|
||||||
if(!(buttons & 8)) newkey = 319;
|
if(!(buttons & 8)) newkey = Common::ASCII_F5;
|
||||||
else if(!(buttons & 512)) newkey = ' ';
|
else if(!(buttons & 512)) newkey = ' ';
|
||||||
else if(!(buttons & 1024)) newkey = numpadmap[(buttons>>4)&15];
|
else if(!(buttons & 1024)) newkey = numpadmap[(buttons>>4)&15];
|
||||||
|
|
||||||
|
@ -69,7 +69,7 @@ int handleInput(struct mapledev *pad, int &mouse_x, int &mouse_y,
|
||||||
if(!(buttons & 4)) lmb++;
|
if(!(buttons & 4)) lmb++;
|
||||||
if(!(buttons & 2)) rmb++;
|
if(!(buttons & 2)) rmb++;
|
||||||
|
|
||||||
if(!(buttons & 8)) newkey = 319;
|
if(!(buttons & 8)) newkey = Common::ASCII_F5;
|
||||||
|
|
||||||
mouse_x += pad->cond.mouse.axis1;
|
mouse_x += pad->cond.mouse.axis1;
|
||||||
mouse_y += pad->cond.mouse.axis2;
|
mouse_y += pad->cond.mouse.axis2;
|
||||||
|
@ -101,22 +101,22 @@ int handleInput(struct mapledev *pad, int &mouse_x, int &mouse_y,
|
||||||
"=¯`{ }+*½<>?" :
|
"=¯`{ }+*½<>?" :
|
||||||
"-^@[ ];:§,./")[key - 0x2d];
|
"-^@[ ];:§,./")[key - 0x2d];
|
||||||
else if(key >= 0x3a && key <= 0x43)
|
else if(key >= 0x3a && key <= 0x43)
|
||||||
newkey = key+(315-0x3a);
|
newkey = key+(Common::ASCII_F1-0x3a);
|
||||||
else if(key >= 0x54 && key <= 0x57)
|
else if(key >= 0x54 && key <= 0x57)
|
||||||
newkey = "/*-+"[key-0x54];
|
newkey = "/*-+"[key-0x54];
|
||||||
else switch(key) {
|
else switch(key) {
|
||||||
case 0x27: case 0x62:
|
case 0x27: case 0x62:
|
||||||
newkey = ((shift & 0x22)? '~' : '0'); break;
|
newkey = ((shift & 0x22)? '~' : '0'); break;
|
||||||
case 0x28: case 0x58:
|
case 0x28: case 0x58:
|
||||||
newkey = 13; break;
|
newkey = Common::KEYCODE_RETURN; break;
|
||||||
case 0x29:
|
case 0x29:
|
||||||
newkey = 27; break;
|
newkey = Common::KEYCODE_ESCAPE; break;
|
||||||
case 0x2a:
|
case 0x2a:
|
||||||
newkey = 8; break;
|
newkey = Common::KEYCODE_BACKSPACE; break;
|
||||||
case 0x2b:
|
case 0x2b:
|
||||||
newkey = 9; break;
|
newkey = Common::KEYCODE_TAB; break;
|
||||||
case 0x2c:
|
case 0x2c:
|
||||||
newkey = ' '; break;
|
newkey = Common::KEYCODE_SPACE; break;
|
||||||
case 0x4c:
|
case 0x4c:
|
||||||
if((shift & 0x11) && (shift & 0x44))
|
if((shift & 0x11) && (shift & 0x44))
|
||||||
exit(0);
|
exit(0);
|
||||||
|
|
|
@ -364,7 +364,7 @@ int gameMenu(Game *games, int num_games)
|
||||||
event = handleInput(locked_get_pads(), mousex, mousey, shiftFlags);
|
event = handleInput(locked_get_pads(), mousex, mousey, shiftFlags);
|
||||||
setimask(mask);
|
setimask(mask);
|
||||||
|
|
||||||
if(event==-Common::EVENT_LBUTTONDOWN || event==13 || event==319) {
|
if(event==-Common::EVENT_LBUTTONDOWN || event==13 || event==Common::ASCII_F5) {
|
||||||
int selected_game = top_game + selector_pos;
|
int selected_game = top_game + selector_pos;
|
||||||
|
|
||||||
for(int fade=0; fade<=256; fade+=4) {
|
for(int fade=0; fade<=256; fade+=4) {
|
||||||
|
|
|
@ -52,7 +52,7 @@ static const char key_names[] =
|
||||||
|
|
||||||
static const short key_codes[] =
|
static const short key_codes[] =
|
||||||
{
|
{
|
||||||
27, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
|
Common::KEYCODE_ESCAPE, Common::ASCII_F1, Common::ASCII_F2, Common::ASCII_F3, Common::ASCII_F4, Common::ASCII_F5, Common::ASCII_F6, Common::ASCII_F7, Common::ASCII_F8, Common::ASCII_F9, Common::ASCII_F10,
|
||||||
K('1','!'), K('2','"'), K('3','#'), K('4','$'), K('5','%'),
|
K('1','!'), K('2','"'), K('3','#'), K('4','$'), K('5','%'),
|
||||||
K('6','&'), K('7','\''), K('8','('), K('9',')'), K('0','~'), K('-','='),
|
K('6','&'), K('7','\''), K('8','('), K('9',')'), K('0','~'), K('-','='),
|
||||||
K('q','Q'), K('w','W'), K('e','E'), K('r','R'), K('t','T'),
|
K('q','Q'), K('w','W'), K('e','E'), K('r','R'), K('t','T'),
|
||||||
|
@ -61,7 +61,7 @@ static const short key_codes[] =
|
||||||
K('h','H'), K('j','J'), K('k','K'), K('l','L'), K(';','+'), K(':','*'),
|
K('h','H'), K('j','J'), K('k','K'), K('l','L'), K(';','+'), K(':','*'),
|
||||||
K('z','Z'), K('x','X'), K('c','C'), K('v','V'), K('b','B'),
|
K('z','Z'), K('x','X'), K('c','C'), K('v','V'), K('b','B'),
|
||||||
K('n','N'), K('m','M'), K(',','<'), K('.','>'), K('/','?'), K('\\','_'),
|
K('n','N'), K('m','M'), K(',','<'), K('.','>'), K('/','?'), K('\\','_'),
|
||||||
~Common::KBD_SHIFT, ~Common::KBD_CTRL, ~Common::KBD_ALT, ' ', 8, 13
|
~Common::KBD_SHIFT, ~Common::KBD_CTRL, ~Common::KBD_ALT, ' ', Common::KEYCODE_BACKSPACE, Common::KEYCODE_RETURN
|
||||||
};
|
};
|
||||||
|
|
||||||
SoftKeyboard::SoftKeyboard(const OSystem_Dreamcast *_os)
|
SoftKeyboard::SoftKeyboard(const OSystem_Dreamcast *_os)
|
||||||
|
|
|
@ -333,8 +333,8 @@ endif
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
%.nds: %.bin
|
%.nds: %.bin
|
||||||
@echo ndstool -c $@ -9 scummvm.bin $(ARM7BIN) -b ../../$(LOGO) "$(shell basename $@);ScummVM 0.9.0;DS Port"
|
@echo ndstool -c $@ -9 scummvm.bin $(ARM7BIN) -b ../../$(LOGO) "$(shell basename $@);ScummVM 0.11.0svn;DS Port"
|
||||||
ndstool -c $@ -9 scummvm.bin $(ARM7BIN) -b ../../$(LOGO) "$(shell basename $@);ScummVM 0.9.1;DS Port"
|
ndstool -c $@ -9 scummvm.bin $(ARM7BIN) -b ../../$(LOGO) "$(shell basename $@);ScummVM 0.11.0svn;DS Port"
|
||||||
dsbuild $@ -l ../ndsloader.bin
|
dsbuild $@ -l ../ndsloader.bin
|
||||||
|
|
||||||
padbin 16 $(basename $@).ds.gba
|
padbin 16 $(basename $@).ds.gba
|
||||||
|
|
|
@ -333,27 +333,25 @@ void initSprites() {
|
||||||
void saveGameBackBuffer() {
|
void saveGameBackBuffer() {
|
||||||
#ifdef DISABLE_SCUMM
|
#ifdef DISABLE_SCUMM
|
||||||
if (savedBuffer == NULL) savedBuffer = new u8[gameWidth * gameHeight];
|
if (savedBuffer == NULL) savedBuffer = new u8[gameWidth * gameHeight];
|
||||||
for (int r = 0; r < 200; r++) {
|
for (int r = 0; r < gameHeight; r++) {
|
||||||
memcpy(savedBuffer + (r * gameWidth), ((u8 *) (get8BitBackBuffer())) + (r * 512), gameWidth);
|
memcpy(savedBuffer + (r * gameWidth), ((u8 *) (get8BitBackBuffer())) + (r * 512), gameWidth);
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void restoreGameBackBuffer() {
|
void restoreGameBackBuffer() {
|
||||||
#ifdef DISABLE_SCUMM
|
#ifdef DISABLE_SCUMM
|
||||||
if (savedBuffer) {
|
if (savedBuffer) {
|
||||||
for (int r = 0; r < 200; r++) {
|
for (int r = 0; r < gameHeight; r++) {
|
||||||
memcpy(((u8 *) (BG_GFX_SUB)) + (r * 512), savedBuffer + (r * gameWidth), gameWidth);
|
memcpy(((u8 *) (BG_GFX_SUB)) + (r * 512), savedBuffer + (r * gameWidth), gameWidth);
|
||||||
memcpy(((u8 *) (get8BitBackBuffer())) + (r * 512), savedBuffer + (r * gameWidth), gameWidth);
|
memcpy(((u8 *) (get8BitBackBuffer())) + (r * 512), savedBuffer + (r * gameWidth), gameWidth);
|
||||||
}
|
}
|
||||||
|
|
||||||
delete savedBuffer;
|
delete savedBuffer;
|
||||||
savedBuffer = NULL;
|
savedBuffer = NULL;
|
||||||
}
|
}
|
||||||
#endif
|
#else
|
||||||
|
memset(get8BitBackBuffer(), 0, 512 * 256);
|
||||||
#ifndef DISABLE_SCUMM
|
memset(BG_GFX_SUB, 0, 512 * 256);
|
||||||
memset(get8BitBackBuffer(), 0, 512 * 256);
|
|
||||||
memset(BG_GFX_SUB, 0, 512 * 256);
|
|
||||||
if (Scumm::g_scumm) {
|
if (Scumm::g_scumm) {
|
||||||
Scumm::g_scumm->markRectAsDirty(Scumm::kMainVirtScreen, 0, gameWidth - 1, 0, gameHeight - 1, 1);
|
Scumm::g_scumm->markRectAsDirty(Scumm::kMainVirtScreen, 0, gameWidth - 1, 0, gameHeight - 1, 1);
|
||||||
Scumm::g_scumm->markRectAsDirty(Scumm::kTextVirtScreen, 0, gameWidth - 1, 0, gameHeight - 1, 1);
|
Scumm::g_scumm->markRectAsDirty(Scumm::kTextVirtScreen, 0, gameWidth - 1, 0, gameHeight - 1, 1);
|
||||||
|
@ -996,11 +994,10 @@ void setKeyboardEnable(bool en) {
|
||||||
// Copy the sub screen VRAM from the top screen - they should always be
|
// Copy the sub screen VRAM from the top screen - they should always be
|
||||||
// the same.
|
// the same.
|
||||||
u16* buffer = get8BitBackBuffer();
|
u16* buffer = get8BitBackBuffer();
|
||||||
|
|
||||||
for (int r = 0; r < (512 * 256) >> 1; r++) {
|
for (int r = 0; r < (512 * 256) >> 1; r++)
|
||||||
BG_GFX_SUB[r] = buffer[r];
|
BG_GFX_SUB[r] = buffer[r];
|
||||||
}
|
|
||||||
|
|
||||||
SUB_DISPLAY_CR &= ~DISPLAY_BG1_ACTIVE; // Turn off keyboard layer
|
SUB_DISPLAY_CR &= ~DISPLAY_BG1_ACTIVE; // Turn off keyboard layer
|
||||||
SUB_DISPLAY_CR |= DISPLAY_BG3_ACTIVE; // Turn on game layer
|
SUB_DISPLAY_CR |= DISPLAY_BG3_ACTIVE; // Turn on game layer
|
||||||
} else {
|
} else {
|
||||||
|
@ -1229,7 +1226,7 @@ void addEventsToQueue() {
|
||||||
|
|
||||||
if (leftHandedSwap(getKeysChanged()) & KEY_UP) {
|
if (leftHandedSwap(getKeysChanged()) & KEY_UP) {
|
||||||
event.type = getKeyEvent(leftHandedSwap(KEY_UP));
|
event.type = getKeyEvent(leftHandedSwap(KEY_UP));
|
||||||
event.kbd.keycode = SDLK_UP;
|
event.kbd.keycode = Common::KEYCODE_UP;
|
||||||
event.kbd.ascii = 0;
|
event.kbd.ascii = 0;
|
||||||
event.kbd.flags = 0;
|
event.kbd.flags = 0;
|
||||||
system->addEvent(event);
|
system->addEvent(event);
|
||||||
|
@ -1237,7 +1234,7 @@ void addEventsToQueue() {
|
||||||
|
|
||||||
if (leftHandedSwap(getKeysChanged()) & KEY_DOWN) {
|
if (leftHandedSwap(getKeysChanged()) & KEY_DOWN) {
|
||||||
event.type = getKeyEvent(leftHandedSwap(KEY_DOWN));
|
event.type = getKeyEvent(leftHandedSwap(KEY_DOWN));
|
||||||
event.kbd.keycode = SDLK_DOWN;
|
event.kbd.keycode = Common::KEYCODE_DOWN;
|
||||||
event.kbd.ascii = 0;
|
event.kbd.ascii = 0;
|
||||||
event.kbd.flags = 0;
|
event.kbd.flags = 0;
|
||||||
system->addEvent(event);
|
system->addEvent(event);
|
||||||
|
@ -1245,7 +1242,7 @@ void addEventsToQueue() {
|
||||||
|
|
||||||
if (leftHandedSwap(getKeysDown()) & KEY_A) {
|
if (leftHandedSwap(getKeysDown()) & KEY_A) {
|
||||||
event.type = getKeyEvent(leftHandedSwap(KEY_A));
|
event.type = getKeyEvent(leftHandedSwap(KEY_A));
|
||||||
event.kbd.keycode = SDLK_RETURN;
|
event.kbd.keycode = Common::KEYCODE_RETURN;
|
||||||
event.kbd.ascii = 0;
|
event.kbd.ascii = 0;
|
||||||
event.kbd.flags = 0;
|
event.kbd.flags = 0;
|
||||||
system->addEvent(event);
|
system->addEvent(event);
|
||||||
|
@ -1256,8 +1253,8 @@ void addEventsToQueue() {
|
||||||
|
|
||||||
if ((getKeysChanged() & KEY_START)) {
|
if ((getKeysChanged() & KEY_START)) {
|
||||||
event.type = getKeyEvent(KEY_START);
|
event.type = getKeyEvent(KEY_START);
|
||||||
event.kbd.keycode = 319; // F5
|
event.kbd.keycode = Common::KEYCODE_F5;
|
||||||
event.kbd.ascii = 319;
|
event.kbd.ascii = Common::ASCII_F5;
|
||||||
event.kbd.flags = 0;
|
event.kbd.flags = 0;
|
||||||
system->addEvent(event);
|
system->addEvent(event);
|
||||||
}
|
}
|
||||||
|
@ -2315,6 +2312,8 @@ int main(void)
|
||||||
consolePrintf("-------------------------------\n");
|
consolePrintf("-------------------------------\n");
|
||||||
consolePrintf("ScummVM DS\n");
|
consolePrintf("ScummVM DS\n");
|
||||||
consolePrintf("Ported by Neil Millstone\n");
|
consolePrintf("Ported by Neil Millstone\n");
|
||||||
|
FIXME: Change this code to make use of base/internal_version.h
|
||||||
|
resp. uses gScummVMVersion from base/version.h
|
||||||
consolePrintf("Version 0.10.0SVN ");
|
consolePrintf("Version 0.10.0SVN ");
|
||||||
#if defined(DS_BUILD_A)
|
#if defined(DS_BUILD_A)
|
||||||
consolePrintf("build A\n");
|
consolePrintf("build A\n");
|
||||||
|
@ -2483,4 +2482,3 @@ int main(void)
|
||||||
int main() {
|
int main() {
|
||||||
DS::main();
|
DS::main();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -158,8 +158,8 @@ void DSOptionsDialog::handleCommand(GUI::CommandSender *sender, uint32 cmd, uint
|
||||||
|
|
||||||
Common::Event event;
|
Common::Event event;
|
||||||
event.type = Common::EVENT_KEYDOWN;
|
event.type = Common::EVENT_KEYDOWN;
|
||||||
event.kbd.ascii = SDLK_DOWN;
|
event.kbd.ascii = 0;
|
||||||
event.kbd.keycode = SDLK_DOWN;
|
event.kbd.keycode = Common::KEYCODE_DOWN;
|
||||||
OSystem_DS::instance()->addEvent(event);
|
OSystem_DS::instance()->addEvent(event);
|
||||||
|
|
||||||
event.type = Common::EVENT_KEYUP;
|
event.type = Common::EVENT_KEYUP;
|
||||||
|
|
|
@ -173,8 +173,8 @@ void OSystem_DS::copyRectToScreen(const byte *buf, int pitch, int x, int y, int
|
||||||
u16* src = (u16 *) buf;
|
u16* src = (u16 *) buf;
|
||||||
|
|
||||||
if (DS::getKeyboardEnable()) {
|
if (DS::getKeyboardEnable()) {
|
||||||
|
for (int dy = y; dy < y + h; dy++)
|
||||||
for (int dy = y; dy < y + h; dy++) {
|
{
|
||||||
u16* dest = bg + (dy << 8) + (x >> 1);
|
u16* dest = bg + (dy << 8) + (x >> 1);
|
||||||
|
|
||||||
DC_FlushRange(src, w << 1);
|
DC_FlushRange(src, w << 1);
|
||||||
|
@ -185,7 +185,8 @@ void OSystem_DS::copyRectToScreen(const byte *buf, int pitch, int x, int y, int
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
for (int dy = y; dy < y + h; dy++) {
|
for (int dy = y; dy < y + h; dy++)
|
||||||
|
{
|
||||||
u16* dest1 = bg + (dy << 8) + (x >> 1);
|
u16* dest1 = bg + (dy << 8) + (x >> 1);
|
||||||
u16* dest2 = bgSub + (dy << 8) + (x >> 1);
|
u16* dest2 = bgSub + (dy << 8) + (x >> 1);
|
||||||
|
|
||||||
|
@ -473,22 +474,36 @@ Common::SaveFileManager* OSystem_DS::getSavefileManager()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OSystem_DS::grabRawScreen(Graphics::Surface* surf) {
|
Graphics::Surface *OSystem_DS::lockScreen() {
|
||||||
surf->create(DS::getGameWidth(), DS::getGameHeight(), 1);
|
// For now, we create a full temporary screen surface, to which we copy the
|
||||||
|
// the screen content. Later unlockScreen will copy everything back.
|
||||||
|
// Not very nice nor efficient, but at least works, and is not worse
|
||||||
|
// than in the bad old times where we used grabRawScreen + copyRectToScreen.
|
||||||
|
|
||||||
|
_framebuffer.create(DS::getGameWidth(), DS::getGameHeight(), 1);
|
||||||
|
|
||||||
// Ensure we copy using 16 bit quantities due to limitation of VRAM addressing
|
// Ensure we copy using 16 bit quantities due to limitation of VRAM addressing
|
||||||
// TODO: Change this to work with the software scalar (hint: video ram format is different)
|
|
||||||
|
|
||||||
u16* image = (u16 *) DS::get8BitBackBuffer();
|
u16* image = (u16 *) DS::get8BitBackBuffer();
|
||||||
for (int y = 0; y < DS::getGameHeight(); y++)
|
for (int y = 0; y < DS::getGameHeight(); y++)
|
||||||
{
|
{
|
||||||
DC_FlushRange((image + (y * 512)), DS::getGameWidth());
|
DC_FlushRange(image + (y << 8), DS::getGameWidth());
|
||||||
for (int x = 0; x < DS::getGameWidth() >> 1; x++)
|
for (int x = 0; x < DS::getGameWidth() >> 1; x++)
|
||||||
{
|
{
|
||||||
*(((u16 *) (surf->pixels)) + y * (DS::getGameWidth() >> 1) + x) = *(image + y * 256 + x);
|
*(((u16 *) (_framebuffer.pixels)) + y * (DS::getGameWidth() >> 1) + x) = image[y << 8 + x];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return &_framebuffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
void OSystem_DS::unlockScreen() {
|
||||||
|
// Copy temp framebuffer back to screen
|
||||||
|
copyRectToScreen((byte *)_framebuffer.pixels, _framebuffer.pitch, 0, 0, _framebuffer.w, _framebuffer.h);
|
||||||
|
|
||||||
|
// Free memory
|
||||||
|
_framebuffer.free();
|
||||||
}
|
}
|
||||||
|
|
||||||
void OSystem_DS::setFocusRectangle(const Common::Rect& rect) {
|
void OSystem_DS::setFocusRectangle(const Common::Rect& rect) {
|
||||||
|
|
|
@ -53,6 +53,8 @@ public:
|
||||||
DSAudioMixer* _mixer;
|
DSAudioMixer* _mixer;
|
||||||
DSTimerManager* _timer;
|
DSTimerManager* _timer;
|
||||||
|
|
||||||
|
Graphics::Surface _framebuffer;
|
||||||
|
|
||||||
static OSystem_DS* _instance;
|
static OSystem_DS* _instance;
|
||||||
|
|
||||||
typedef void (*SoundProc)(void *param, byte *buf, int len);
|
typedef void (*SoundProc)(void *param, byte *buf, int len);
|
||||||
|
@ -127,7 +129,8 @@ public:
|
||||||
void addEvent(Common::Event& e);
|
void addEvent(Common::Event& e);
|
||||||
bool isEventQueueEmpty() { return queuePos == 0; }
|
bool isEventQueueEmpty() { return queuePos == 0; }
|
||||||
|
|
||||||
virtual bool grabRawScreen(Graphics::Surface* surf);
|
virtual Graphics::Surface *lockScreen();
|
||||||
|
virtual void unlockScreen();
|
||||||
|
|
||||||
virtual void setFocusRectangle(const Common::Rect& rect);
|
virtual void setFocusRectangle(const Common::Rect& rect);
|
||||||
|
|
||||||
|
@ -159,4 +162,9 @@ void OSystem_DS::colorToRGB(OverlayColor color, uint8 &r, uint8 &g, uint8 &b)
|
||||||
//consolePrintf("coltorgb\n");
|
//consolePrintf("coltorgb\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace DS
|
||||||
|
{
|
||||||
|
bool isCpuScalerEnabled();
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -56,9 +56,9 @@ key_data keys[DS_NUM_KEYS] = {
|
||||||
{35, 17, 0, '8'},
|
{35, 17, 0, '8'},
|
||||||
{36, 19, 0, '9'},
|
{36, 19, 0, '9'},
|
||||||
{27, 21, 0, '0'},
|
{27, 21, 0, '0'},
|
||||||
{45, 23, 0, SDLK_MINUS},
|
{45, 23, 0, Common::KEYCODE_MINUS},
|
||||||
{50, 25, 0, SDLK_EQUALS},
|
{50, 25, 0, Common::KEYCODE_EQUALS},
|
||||||
{52, 27, 0, SDLK_BACKSPACE},
|
{52, 27, 0, Common::KEYCODE_BACKSPACE},
|
||||||
|
|
||||||
// Top row
|
// Top row
|
||||||
{'Q'-'A' + 1, 4, 2, 'Q'},
|
{'Q'-'A' + 1, 4, 2, 'Q'},
|
||||||
|
@ -71,8 +71,8 @@ key_data keys[DS_NUM_KEYS] = {
|
||||||
{'I'-'A' + 1, 18, 2, 'I'},
|
{'I'-'A' + 1, 18, 2, 'I'},
|
||||||
{'O'-'A' + 1, 20, 2, 'O'},
|
{'O'-'A' + 1, 20, 2, 'O'},
|
||||||
{'P'-'A' + 1, 22, 2, 'P'},
|
{'P'-'A' + 1, 22, 2, 'P'},
|
||||||
{43, 24, 2, SDLK_LEFTBRACKET},
|
{43, 24, 2, Common::KEYCODE_LEFTBRACKET},
|
||||||
{44, 26, 2, SDLK_RIGHTBRACKET},
|
{44, 26, 2, Common::KEYCODE_RIGHTBRACKET},
|
||||||
|
|
||||||
// Middle row
|
// Middle row
|
||||||
{55, 3, 4, DS_CAPSLOCK},
|
{55, 3, 4, DS_CAPSLOCK},
|
||||||
|
@ -85,9 +85,9 @@ key_data keys[DS_NUM_KEYS] = {
|
||||||
{'J'-'A' + 1, 17, 4, 'J'},
|
{'J'-'A' + 1, 17, 4, 'J'},
|
||||||
{'K'-'A' + 1, 19, 4, 'K'},
|
{'K'-'A' + 1, 19, 4, 'K'},
|
||||||
{'L'-'A' + 1, 21, 4, 'L'},
|
{'L'-'A' + 1, 21, 4, 'L'},
|
||||||
{42, 23, 4, SDLK_SEMICOLON},
|
{42, 23, 4, Common::KEYCODE_SEMICOLON},
|
||||||
{41, 25, 4, SDLK_QUOTE},
|
{41, 25, 4, Common::KEYCODE_QUOTE},
|
||||||
{46, 27, 4, SDLK_RETURN},
|
{46, 27, 4, Common::KEYCODE_RETURN},
|
||||||
|
|
||||||
// Bottom row
|
// Bottom row
|
||||||
{51, 4, 6, DS_SHIFT},
|
{51, 4, 6, DS_SHIFT},
|
||||||
|
@ -98,26 +98,26 @@ key_data keys[DS_NUM_KEYS] = {
|
||||||
{'B'-'A' + 1, 14, 6, 'B'},
|
{'B'-'A' + 1, 14, 6, 'B'},
|
||||||
{'N'-'A' + 1, 16, 6, 'N'},
|
{'N'-'A' + 1, 16, 6, 'N'},
|
||||||
{'M'-'A' + 1, 18, 6, 'M'},
|
{'M'-'A' + 1, 18, 6, 'M'},
|
||||||
{38, 20, 6, SDLK_COMMA},
|
{38, 20, 6, Common::KEYCODE_COMMA},
|
||||||
{39, 22, 6, SDLK_PERIOD},
|
{39, 22, 6, Common::KEYCODE_PERIOD},
|
||||||
{40, 24, 6, SDLK_SLASH},
|
{40, 24, 6, Common::KEYCODE_SLASH},
|
||||||
|
|
||||||
// Space bar
|
// Space bar
|
||||||
{47, 9, 8, SDLK_SPACE},
|
{47, 9, 8, Common::KEYCODE_SPACE},
|
||||||
{48, 11, 8, SDLK_SPACE},
|
{48, 11, 8, Common::KEYCODE_SPACE},
|
||||||
{48, 13, 8, SDLK_SPACE},
|
{48, 13, 8, Common::KEYCODE_SPACE},
|
||||||
{48, 15, 8, SDLK_SPACE},
|
{48, 15, 8, Common::KEYCODE_SPACE},
|
||||||
{48, 17, 8, SDLK_SPACE},
|
{48, 17, 8, Common::KEYCODE_SPACE},
|
||||||
{49, 19, 8, SDLK_SPACE},
|
{49, 19, 8, Common::KEYCODE_SPACE},
|
||||||
|
|
||||||
// Cursor arrows
|
// Cursor arrows
|
||||||
{52, 27, 8, SDLK_LEFT},
|
{52, 27, 8, Common::KEYCODE_LEFT},
|
||||||
{54, 29, 8, SDLK_DOWN},
|
{54, 29, 8, Common::KEYCODE_DOWN},
|
||||||
{53, 31, 8, SDLK_RIGHT},
|
{53, 31, 8, Common::KEYCODE_RIGHT},
|
||||||
{51, 29, 6, SDLK_UP},
|
{51, 29, 6, Common::KEYCODE_UP},
|
||||||
|
|
||||||
// Close button
|
// Close button
|
||||||
{56, 30, 0, SDLK_UNKNOWN},
|
{56, 30, 0, Common::KEYCODE_INVALID},
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -237,7 +237,7 @@ void addKeyboardEvents() {
|
||||||
Common::Event event;
|
Common::Event event;
|
||||||
|
|
||||||
// consolePrintf("Key: %d\n", r);
|
// consolePrintf("Key: %d\n", r);
|
||||||
if ((keys[r].character == SDLK_UNKNOWN)) {
|
if ((keys[r].character == Common::KEYCODE_INVALID)) {
|
||||||
// Close button
|
// Close button
|
||||||
DS::closed = true;
|
DS::closed = true;
|
||||||
} else if ((keys[r].character >= '0') && (keys[r].character <= '9')) {
|
} else if ((keys[r].character >= '0') && (keys[r].character <= '9')) {
|
||||||
|
|
|
@ -25,75 +25,6 @@
|
||||||
|
|
||||||
namespace DS {
|
namespace DS {
|
||||||
|
|
||||||
enum SDLKey {
|
|
||||||
SDLK_UNKNOWN = 0, SDLK_FIRST = 0, SDLK_BACKSPACE = 8, SDLK_TAB = 9,
|
|
||||||
SDLK_CLEAR = 12, SDLK_RETURN = 13, SDLK_PAUSE = 19, SDLK_ESCAPE = 27,
|
|
||||||
SDLK_SPACE = 32, SDLK_EXCLAIM = 33, SDLK_QUOTEDBL = 34, SDLK_HASH = 35,
|
|
||||||
SDLK_DOLLAR = 36, SDLK_AMPERSAND = 38, SDLK_QUOTE = 39, SDLK_LEFTPAREN = 40,
|
|
||||||
SDLK_RIGHTPAREN = 41, SDLK_ASTERISK = 42, SDLK_PLUS = 43, SDLK_COMMA = 44,
|
|
||||||
SDLK_MINUS = 45, SDLK_PERIOD = 46, SDLK_SLASH = 47, SDLK_0 = 48,
|
|
||||||
SDLK_1 = 49, SDLK_2 = 50, SDLK_3 = 51, SDLK_4 = 52,
|
|
||||||
SDLK_5 = 53, SDLK_6 = 54, SDLK_7 = 55, SDLK_8 = 56,
|
|
||||||
SDLK_9 = 57, SDLK_COLON = 58, SDLK_SEMICOLON = 59, SDLK_LESS = 60,
|
|
||||||
SDLK_EQUALS = 61, SDLK_GREATER = 62, SDLK_QUESTION = 63, SDLK_AT = 64,
|
|
||||||
SDLK_LEFTBRACKET = 91, SDLK_BACKSLASH = 92, SDLK_RIGHTBRACKET = 93, SDLK_CARET = 94,
|
|
||||||
SDLK_UNDERSCORE = 95, SDLK_BACKQUOTE = 96, SDLK_a = 97, SDLK_b = 98,
|
|
||||||
SDLK_c = 99, SDLK_d = 100, SDLK_e = 101, SDLK_f = 102,
|
|
||||||
SDLK_g = 103, SDLK_h = 104, SDLK_i = 105, SDLK_j = 106,
|
|
||||||
SDLK_k = 107, SDLK_l = 108, SDLK_m = 109, SDLK_n = 110,
|
|
||||||
SDLK_o = 111, SDLK_p = 112, SDLK_q = 113, SDLK_r = 114,
|
|
||||||
SDLK_s = 115, SDLK_t = 116, SDLK_u = 117, SDLK_v = 118,
|
|
||||||
SDLK_w = 119, SDLK_x = 120, SDLK_y = 121, SDLK_z = 122,
|
|
||||||
SDLK_DELETE = 127, SDLK_WORLD_0 = 160, SDLK_WORLD_1 = 161, SDLK_WORLD_2 = 162,
|
|
||||||
SDLK_WORLD_3 = 163, SDLK_WORLD_4 = 164, SDLK_WORLD_5 = 165, SDLK_WORLD_6 = 166,
|
|
||||||
SDLK_WORLD_7 = 167, SDLK_WORLD_8 = 168, SDLK_WORLD_9 = 169, SDLK_WORLD_10 = 170,
|
|
||||||
SDLK_WORLD_11 = 171, SDLK_WORLD_12 = 172, SDLK_WORLD_13 = 173, SDLK_WORLD_14 = 174,
|
|
||||||
SDLK_WORLD_15 = 175, SDLK_WORLD_16 = 176, SDLK_WORLD_17 = 177, SDLK_WORLD_18 = 178,
|
|
||||||
SDLK_WORLD_19 = 179, SDLK_WORLD_20 = 180, SDLK_WORLD_21 = 181, SDLK_WORLD_22 = 182,
|
|
||||||
SDLK_WORLD_23 = 183, SDLK_WORLD_24 = 184, SDLK_WORLD_25 = 185, SDLK_WORLD_26 = 186,
|
|
||||||
SDLK_WORLD_27 = 187, SDLK_WORLD_28 = 188, SDLK_WORLD_29 = 189, SDLK_WORLD_30 = 190,
|
|
||||||
SDLK_WORLD_31 = 191, SDLK_WORLD_32 = 192, SDLK_WORLD_33 = 193, SDLK_WORLD_34 = 194,
|
|
||||||
SDLK_WORLD_35 = 195, SDLK_WORLD_36 = 196, SDLK_WORLD_37 = 197, SDLK_WORLD_38 = 198,
|
|
||||||
SDLK_WORLD_39 = 199, SDLK_WORLD_40 = 200, SDLK_WORLD_41 = 201, SDLK_WORLD_42 = 202,
|
|
||||||
SDLK_WORLD_43 = 203, SDLK_WORLD_44 = 204, SDLK_WORLD_45 = 205, SDLK_WORLD_46 = 206,
|
|
||||||
SDLK_WORLD_47 = 207, SDLK_WORLD_48 = 208, SDLK_WORLD_49 = 209, SDLK_WORLD_50 = 210,
|
|
||||||
SDLK_WORLD_51 = 211, SDLK_WORLD_52 = 212, SDLK_WORLD_53 = 213, SDLK_WORLD_54 = 214,
|
|
||||||
SDLK_WORLD_55 = 215, SDLK_WORLD_56 = 216, SDLK_WORLD_57 = 217, SDLK_WORLD_58 = 218,
|
|
||||||
SDLK_WORLD_59 = 219, SDLK_WORLD_60 = 220, SDLK_WORLD_61 = 221, SDLK_WORLD_62 = 222,
|
|
||||||
SDLK_WORLD_63 = 223, SDLK_WORLD_64 = 224, SDLK_WORLD_65 = 225, SDLK_WORLD_66 = 226,
|
|
||||||
SDLK_WORLD_67 = 227, SDLK_WORLD_68 = 228, SDLK_WORLD_69 = 229, SDLK_WORLD_70 = 230,
|
|
||||||
SDLK_WORLD_71 = 231, SDLK_WORLD_72 = 232, SDLK_WORLD_73 = 233, SDLK_WORLD_74 = 234,
|
|
||||||
SDLK_WORLD_75 = 235, SDLK_WORLD_76 = 236, SDLK_WORLD_77 = 237, SDLK_WORLD_78 = 238,
|
|
||||||
SDLK_WORLD_79 = 239, SDLK_WORLD_80 = 240, SDLK_WORLD_81 = 241, SDLK_WORLD_82 = 242,
|
|
||||||
SDLK_WORLD_83 = 243, SDLK_WORLD_84 = 244, SDLK_WORLD_85 = 245, SDLK_WORLD_86 = 246,
|
|
||||||
SDLK_WORLD_87 = 247, SDLK_WORLD_88 = 248, SDLK_WORLD_89 = 249, SDLK_WORLD_90 = 250,
|
|
||||||
SDLK_WORLD_91 = 251, SDLK_WORLD_92 = 252, SDLK_WORLD_93 = 253, SDLK_WORLD_94 = 254,
|
|
||||||
SDLK_WORLD_95 = 255, SDLK_KP0 = 256, SDLK_KP1 = 257, SDLK_KP2 = 258,
|
|
||||||
SDLK_KP3 = 259, SDLK_KP4 = 260, SDLK_KP5 = 261, SDLK_KP6 = 262,
|
|
||||||
SDLK_KP7 = 263, SDLK_KP8 = 264, SDLK_KP9 = 265, SDLK_KP_PERIOD = 266,
|
|
||||||
SDLK_KP_DIVIDE = 267, SDLK_KP_MULTIPLY = 268, SDLK_KP_MINUS = 269, SDLK_KP_PLUS = 270,
|
|
||||||
SDLK_KP_ENTER = 271, SDLK_KP_EQUALS = 272, SDLK_UP = 273, SDLK_DOWN = 274,
|
|
||||||
SDLK_RIGHT = 275, SDLK_LEFT = 276, SDLK_INSERT = 277, SDLK_HOME = 278,
|
|
||||||
SDLK_END = 279, SDLK_PAGEUP = 280, SDLK_PAGEDOWN = 281, SDLK_F1 = 282,
|
|
||||||
SDLK_F2 = 283, SDLK_F3 = 284, SDLK_F4 = 285, SDLK_F5 = 286,
|
|
||||||
SDLK_F6 = 287, SDLK_F7 = 288, SDLK_F8 = 289, SDLK_F9 = 290,
|
|
||||||
SDLK_F10 = 291, SDLK_F11 = 292, SDLK_F12 = 293, SDLK_F13 = 294,
|
|
||||||
SDLK_F14 = 295, SDLK_F15 = 296, SDLK_NUMLOCK = 300, SDLK_CAPSLOCK = 301,
|
|
||||||
SDLK_SCROLLOCK = 302, SDLK_RSHIFT = 303, SDLK_LSHIFT = 304, SDLK_RCTRL = 305,
|
|
||||||
SDLK_LCTRL = 306, SDLK_RALT = 307, SDLK_LALT = 308, SDLK_RMETA = 309,
|
|
||||||
SDLK_LMETA = 310, SDLK_LSUPER = 311, SDLK_RSUPER = 312, SDLK_MODE = 313,
|
|
||||||
SDLK_COMPOSE = 314, SDLK_HELP = 315, SDLK_PRINT = 316, SDLK_SYSREQ = 317,
|
|
||||||
SDLK_BREAK = 318, SDLK_MENU = 319, SDLK_POWER = 320, SDLK_EURO = 321,
|
|
||||||
SDLK_UNDO = 322, SDLK_LAST
|
|
||||||
};
|
|
||||||
|
|
||||||
enum SDLMod {
|
|
||||||
KMOD_NONE = 0x0000, KMOD_LSHIFT = 0x0001, KMOD_RSHIFT = 0x0002, KMOD_LCTRL = 0x0040,
|
|
||||||
KMOD_RCTRL = 0x0080, KMOD_LALT = 0x0100, KMOD_RALT = 0x0200, KMOD_LMETA = 0x0400,
|
|
||||||
KMOD_RMETA = 0x0800, KMOD_NUM = 0x1000, KMOD_CAPS = 0x2000, KMOD_MODE = 0x4000,
|
|
||||||
KMOD_RESERVED = 0x8000
|
|
||||||
};
|
|
||||||
|
|
||||||
void drawKeyboard(int tileBase, int mapBase, u16* saveSpace);
|
void drawKeyboard(int tileBase, int mapBase, u16* saveSpace);
|
||||||
void restoreVRAM(int tileBase, int mapBase, u16* saveSpace);
|
void restoreVRAM(int tileBase, int mapBase, u16* saveSpace);
|
||||||
void addKeyboardEvents();
|
void addKeyboardEvents();
|
||||||
|
|
|
@ -23,6 +23,7 @@ cp ../../../../scummvm.gp2x ./scummvm-gp2x-`date '+%Y-%m-%d'`/
|
||||||
cp ../../../../AUTHORS ./scummvm-gp2x-`date '+%Y-%m-%d'`/
|
cp ../../../../AUTHORS ./scummvm-gp2x-`date '+%Y-%m-%d'`/
|
||||||
cp ../../../../README ./scummvm-gp2x-`date '+%Y-%m-%d'`/
|
cp ../../../../README ./scummvm-gp2x-`date '+%Y-%m-%d'`/
|
||||||
cp ../../../../COPYING ./scummvm-gp2x-`date '+%Y-%m-%d'`/
|
cp ../../../../COPYING ./scummvm-gp2x-`date '+%Y-%m-%d'`/
|
||||||
|
cp ../../../../COPYRIGHT ./scummvm-gp2x-`date '+%Y-%m-%d'`/
|
||||||
cp ../../../../NEWS ./scummvm-gp2x-`date '+%Y-%m-%d'`/
|
cp ../../../../NEWS ./scummvm-gp2x-`date '+%Y-%m-%d'`/
|
||||||
cp ../../../../gui/themes/modern.ini ./scummvm-gp2x-`date '+%Y-%m-%d'`/
|
cp ../../../../gui/themes/modern.ini ./scummvm-gp2x-`date '+%Y-%m-%d'`/
|
||||||
cp ../../../../gui/themes/modern.zip ./scummvm-gp2x-`date '+%Y-%m-%d'`/
|
cp ../../../../gui/themes/modern.zip ./scummvm-gp2x-`date '+%Y-%m-%d'`/
|
||||||
|
|
|
@ -65,7 +65,7 @@
|
||||||
static int mapKey(SDLKey key, SDLMod mod, Uint16 unicode)
|
static int mapKey(SDLKey key, SDLMod mod, Uint16 unicode)
|
||||||
{
|
{
|
||||||
if (key >= SDLK_F1 && key <= SDLK_F9) {
|
if (key >= SDLK_F1 && key <= SDLK_F9) {
|
||||||
return key - SDLK_F1 + 315;
|
return key - SDLK_F1 + Common::ASCII_F1;
|
||||||
} else if (key >= SDLK_KP0 && key <= SDLK_KP9) {
|
} else if (key >= SDLK_KP0 && key <= SDLK_KP9) {
|
||||||
return key - SDLK_KP0 + '0';
|
return key - SDLK_KP0 + '0';
|
||||||
} else if (key >= SDLK_UP && key <= SDLK_PAGEDOWN) {
|
} else if (key >= SDLK_UP && key <= SDLK_PAGEDOWN) {
|
||||||
|
@ -468,10 +468,10 @@ bool OSystem_GP2X::pollEvent(Common::Event &event) {
|
||||||
break;
|
break;
|
||||||
case GP2X_BUTTON_R:
|
case GP2X_BUTTON_R:
|
||||||
if (GP2X_BUTTON_STATE_L == TRUE) {
|
if (GP2X_BUTTON_STATE_L == TRUE) {
|
||||||
event.kbd.keycode = SDLK_0;
|
event.kbd.keycode = Common::KEYCODE_0;
|
||||||
event.kbd.ascii = mapKey(SDLK_0, ev.key.keysym.mod, 0);
|
event.kbd.ascii = mapKey(SDLK_0, ev.key.keysym.mod, 0);
|
||||||
} else {
|
} else {
|
||||||
event.kbd.keycode = SDLK_F5;
|
event.kbd.keycode = Common::KEYCODE_F5;
|
||||||
event.kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0);
|
event.kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -479,28 +479,28 @@ bool OSystem_GP2X::pollEvent(Common::Event &event) {
|
||||||
if (GP2X_BUTTON_STATE_L == TRUE) {
|
if (GP2X_BUTTON_STATE_L == TRUE) {
|
||||||
event.type = Common::EVENT_QUIT;
|
event.type = Common::EVENT_QUIT;
|
||||||
} else {
|
} else {
|
||||||
event.kbd.keycode = SDLK_ESCAPE;
|
event.kbd.keycode = Common::KEYCODE_ESCAPE;
|
||||||
event.kbd.ascii = mapKey(SDLK_ESCAPE, ev.key.keysym.mod, 0);
|
event.kbd.ascii = mapKey(SDLK_ESCAPE, ev.key.keysym.mod, 0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GP2X_BUTTON_A:
|
case GP2X_BUTTON_A:
|
||||||
event.kbd.keycode = SDLK_PERIOD;
|
event.kbd.keycode = Common::KEYCODE_PERIOD;
|
||||||
event.kbd.ascii = mapKey(SDLK_PERIOD, ev.key.keysym.mod, 0);
|
event.kbd.ascii = mapKey(SDLK_PERIOD, ev.key.keysym.mod, 0);
|
||||||
break;
|
break;
|
||||||
case GP2X_BUTTON_Y:
|
case GP2X_BUTTON_Y:
|
||||||
if (GP2X_BUTTON_STATE_L == TRUE) {
|
if (GP2X_BUTTON_STATE_L == TRUE) {
|
||||||
setZoomOnMouse();
|
setZoomOnMouse();
|
||||||
} else {
|
} else {
|
||||||
event.kbd.keycode = SDLK_SPACE;
|
event.kbd.keycode = Common::KEYCODE_SPACE;
|
||||||
event.kbd.ascii = mapKey(SDLK_SPACE, ev.key.keysym.mod, 0);
|
event.kbd.ascii = mapKey(SDLK_SPACE, ev.key.keysym.mod, 0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case JOY_BUT_RETURN:
|
case JOY_BUT_RETURN:
|
||||||
event.kbd.keycode = SDLK_RETURN;
|
event.kbd.keycode = Common::KEYCODE_RETURN;
|
||||||
event.kbd.ascii = mapKey(SDLK_RETURN, ev.key.keysym.mod, 0);
|
event.kbd.ascii = mapKey(SDLK_RETURN, ev.key.keysym.mod, 0);
|
||||||
break;
|
break;
|
||||||
case JOY_BUT_ZERO:
|
case JOY_BUT_ZERO:
|
||||||
event.kbd.keycode = SDLK_0;
|
event.kbd.keycode = Common::KEYCODE_0;
|
||||||
event.kbd.ascii = mapKey(SDLK_0, ev.key.keysym.mod, 0);
|
event.kbd.ascii = mapKey(SDLK_0, ev.key.keysym.mod, 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -514,7 +514,7 @@ bool OSystem_GP2X::pollEvent(Common::Event &event) {
|
||||||
// displayMessageOnOSD("Left Trigger Pressed");
|
// displayMessageOnOSD("Left Trigger Pressed");
|
||||||
// break;
|
// break;
|
||||||
// } else if ((ev.jbutton.button == GP2X_BUTTON_R) && (ev.jbutton.button != GP2X_BUTTON_L)) {
|
// } else if ((ev.jbutton.button == GP2X_BUTTON_R) && (ev.jbutton.button != GP2X_BUTTON_L)) {
|
||||||
// event.kbd.keycode = SDLK_F5;
|
// event.kbd.keycode = Common::KEYCODE_F5;
|
||||||
// event.kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0);
|
// event.kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0);
|
||||||
// break;
|
// break;
|
||||||
// } else {
|
// } else {
|
||||||
|
@ -525,7 +525,7 @@ bool OSystem_GP2X::pollEvent(Common::Event &event) {
|
||||||
if (GP2X_BUTTON_STATE_L == TRUE) {
|
if (GP2X_BUTTON_STATE_L == TRUE) {
|
||||||
displayMessageOnOSD("Setting CPU Speed at 230MHz");
|
displayMessageOnOSD("Setting CPU Speed at 230MHz");
|
||||||
GP2X_setCpuspeed(200);
|
GP2X_setCpuspeed(200);
|
||||||
//event.kbd.keycode = SDLK_PLUS;
|
//event.kbd.keycode = Common::KEYCODE_PLUS;
|
||||||
//event.kbd.ascii = mapKey(SDLK_PLUS, ev.key.keysym.mod, 0);
|
//event.kbd.ascii = mapKey(SDLK_PLUS, ev.key.keysym.mod, 0);
|
||||||
} else {
|
} else {
|
||||||
GP2X_mixer_move_volume(1);
|
GP2X_mixer_move_volume(1);
|
||||||
|
@ -536,7 +536,7 @@ bool OSystem_GP2X::pollEvent(Common::Event &event) {
|
||||||
if (GP2X_BUTTON_STATE_L == TRUE) {
|
if (GP2X_BUTTON_STATE_L == TRUE) {
|
||||||
displayMessageOnOSD("Setting CPU Speed at 60MHz");
|
displayMessageOnOSD("Setting CPU Speed at 60MHz");
|
||||||
GP2X_setCpuspeed(60);
|
GP2X_setCpuspeed(60);
|
||||||
//event.kbd.keycode = SDLK_MINUS;
|
//event.kbd.keycode = Common::KEYCODE_MINUS;
|
||||||
//event.kbd.ascii = mapKey(SDLK_MINUS, ev.key.keysym.mod, 0);
|
//event.kbd.ascii = mapKey(SDLK_MINUS, ev.key.keysym.mod, 0);
|
||||||
} else {
|
} else {
|
||||||
GP2X_mixer_move_volume(0);
|
GP2X_mixer_move_volume(0);
|
||||||
|
@ -564,26 +564,26 @@ bool OSystem_GP2X::pollEvent(Common::Event &event) {
|
||||||
event.kbd.flags = 0;
|
event.kbd.flags = 0;
|
||||||
switch (ev.jbutton.button) {
|
switch (ev.jbutton.button) {
|
||||||
case GP2X_BUTTON_SELECT:
|
case GP2X_BUTTON_SELECT:
|
||||||
event.kbd.keycode = SDLK_ESCAPE;
|
event.kbd.keycode = Common::KEYCODE_ESCAPE;
|
||||||
event.kbd.ascii = mapKey(SDLK_ESCAPE, ev.key.keysym.mod, 0);
|
event.kbd.ascii = mapKey(SDLK_ESCAPE, ev.key.keysym.mod, 0);
|
||||||
break;
|
break;
|
||||||
case GP2X_BUTTON_A:
|
case GP2X_BUTTON_A:
|
||||||
event.kbd.keycode = SDLK_PERIOD;
|
event.kbd.keycode = Common::KEYCODE_PERIOD;
|
||||||
event.kbd.ascii = mapKey(SDLK_PERIOD, ev.key.keysym.mod, 0);
|
event.kbd.ascii = mapKey(SDLK_PERIOD, ev.key.keysym.mod, 0);
|
||||||
break;
|
break;
|
||||||
case GP2X_BUTTON_Y:
|
case GP2X_BUTTON_Y:
|
||||||
// event.kbd.keycode = SDLK_SPACE;
|
// event.kbd.keycode = Common::KEYCODE_SPACE;
|
||||||
// event.kbd.ascii = mapKey(SDLK_SPACE, ev.key.keysym.mod, 0);
|
// event.kbd.ascii = mapKey(SDLK_SPACE, ev.key.keysym.mod, 0);
|
||||||
break;
|
break;
|
||||||
case GP2X_BUTTON_START:
|
case GP2X_BUTTON_START:
|
||||||
event.kbd.keycode = SDLK_RETURN;
|
event.kbd.keycode = Common::KEYCODE_RETURN;
|
||||||
event.kbd.ascii = mapKey(SDLK_RETURN, ev.key.keysym.mod, 0);
|
event.kbd.ascii = mapKey(SDLK_RETURN, ev.key.keysym.mod, 0);
|
||||||
break;
|
break;
|
||||||
case GP2X_BUTTON_L:
|
case GP2X_BUTTON_L:
|
||||||
GP2X_BUTTON_STATE_L = FALSE;
|
GP2X_BUTTON_STATE_L = FALSE;
|
||||||
break;
|
break;
|
||||||
case GP2X_BUTTON_R:
|
case GP2X_BUTTON_R:
|
||||||
event.kbd.keycode = SDLK_F5;
|
event.kbd.keycode = Common::KEYCODE_F5;
|
||||||
event.kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0);
|
event.kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0);
|
||||||
break;
|
break;
|
||||||
case GP2X_BUTTON_VOLUP:
|
case GP2X_BUTTON_VOLUP:
|
||||||
|
|
|
@ -90,11 +90,8 @@ public:
|
||||||
// The screen will not be updated to reflect the new bitmap
|
// The screen will not be updated to reflect the new bitmap
|
||||||
void copyRectToScreen(const byte *src, int pitch, int x, int y, int w, int h);
|
void copyRectToScreen(const byte *src, int pitch, int x, int y, int w, int h);
|
||||||
|
|
||||||
// Copies the screen to a buffer
|
virtual Graphics::Surface *lockScreen();
|
||||||
bool grabRawScreen(Graphics::Surface *surf);
|
virtual void unlockScreen();
|
||||||
|
|
||||||
// Clear the screen
|
|
||||||
void clearScreen();
|
|
||||||
|
|
||||||
// Update the dirty areas of the screen
|
// Update the dirty areas of the screen
|
||||||
void updateScreen();
|
void updateScreen();
|
||||||
|
|
|
@ -687,22 +687,6 @@ void OSystem_GP2X::setZoomOnMouse() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void OSystem_GP2X::clearScreen() {
|
|
||||||
assert (_transactionMode == kTransactionNone);
|
|
||||||
|
|
||||||
// Try to lock the screen surface
|
|
||||||
if (SDL_LockSurface(_screen) == -1)
|
|
||||||
error("SDL_LockSurface failed: %s", SDL_GetError());
|
|
||||||
|
|
||||||
byte *dst = (byte *)_screen->pixels;
|
|
||||||
|
|
||||||
// Clear the screen
|
|
||||||
memset(dst, 0, _screenWidth * _screenHeight);
|
|
||||||
|
|
||||||
// Unlock the screen surface
|
|
||||||
SDL_UnlockSurface(_screen);
|
|
||||||
}
|
|
||||||
|
|
||||||
void OSystem_GP2X::copyRectToScreen(const byte *src, int pitch, int x, int y, int w, int h) {
|
void OSystem_GP2X::copyRectToScreen(const byte *src, int pitch, int x, int y, int w, int h) {
|
||||||
assert (_transactionMode == kTransactionNone);
|
assert (_transactionMode == kTransactionNone);
|
||||||
assert(src);
|
assert(src);
|
||||||
|
@ -772,15 +756,19 @@ void OSystem_GP2X::copyRectToScreen(const byte *src, int pitch, int x, int y, in
|
||||||
SDL_UnlockSurface(_screen);
|
SDL_UnlockSurface(_screen);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TIDY: DIRTY HACK: Try a REALLY simple version of grabRawScreen to
|
Graphics::Surface *OSystem_GP2X::lockScreen() {
|
||||||
// debug why it will not work on the GP2X.
|
_framebuffer.pixels = _screen->pixels;
|
||||||
bool OSystem_GP2X::grabRawScreen(Graphics::Surface *surf) {
|
_framebuffer.w = _screen->w;
|
||||||
assert(surf);
|
_framebuffer.h = _screen->h;
|
||||||
|
_framebuffer.pitch = _screen->pitch;
|
||||||
|
_framebuffer.bytesPerPixel = 1;
|
||||||
|
|
||||||
surf->create(_screenWidth, _screenHeight, 1);
|
return &_framebuffer;
|
||||||
memcpy(surf->pixels, _screen->pixels, _screenWidth * _screenHeight);
|
}
|
||||||
|
|
||||||
return true;
|
void OSystem_GP2X::unlockScreen() {
|
||||||
|
// Force screen update
|
||||||
|
_forceFull = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OSystem_GP2X::addDirtyRect(int x, int y, int w, int h, bool realCoordinates) {
|
void OSystem_GP2X::addDirtyRect(int x, int y, int w, int h, bool realCoordinates) {
|
||||||
|
|
|
@ -209,14 +209,18 @@ void OSystem_GP32::copyRectToScreen(const byte *src, int pitch, int x, int y, in
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OSystem_GP32::grabRawScreen(Graphics::Surface *surf) {
|
Graphics::Surface *OSystem_GP32::lockScreen() {
|
||||||
assert(surf);
|
_framebuffer.pixels = _gameScreen;
|
||||||
|
_framebuffer.w = _screenWidth;
|
||||||
|
_framebuffer.h = _screenHeight;
|
||||||
|
_framebuffer.pitch = _screenWidth;
|
||||||
|
_framebuffer.bytesPerPixel = 1;
|
||||||
|
|
||||||
surf->create(_screenWidth, _screenHeight, 1);
|
return &_framebuffer;
|
||||||
|
}
|
||||||
|
|
||||||
memcpy(surf->pixels, _gameScreen, _screenWidth * _screenHeight);
|
void OSystem_GP32::unlockScreen() {
|
||||||
|
// The screen is always completely update anyway, so we don't have to force a full update here.
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: Implement Dirty rect?
|
//TODO: Implement Dirty rect?
|
||||||
|
@ -524,8 +528,10 @@ bool OSystem_GP32::pollEvent(Common::Event &event) {
|
||||||
event.type = Common::EVENT_KEYDOWN;
|
event.type = Common::EVENT_KEYDOWN;
|
||||||
if (_overlayVisible)
|
if (_overlayVisible)
|
||||||
event.kbd.keycode = event.kbd.ascii = 13;
|
event.kbd.keycode = event.kbd.ascii = 13;
|
||||||
else
|
else {
|
||||||
event.kbd.keycode = event.kbd.ascii = 319;
|
event.kbd.keycode = Common::KEYCODE_F5;
|
||||||
|
event.kbd.ascii = Common::ASCII_F5;
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (ev.button == GPC_VK_SELECT) { // SELECT = pause
|
if (ev.button == GPC_VK_SELECT) { // SELECT = pause
|
||||||
|
@ -596,8 +602,10 @@ bool OSystem_GP32::pollEvent(Common::Event &event) {
|
||||||
event.type = Common::EVENT_KEYUP;
|
event.type = Common::EVENT_KEYUP;
|
||||||
if (_overlayVisible)
|
if (_overlayVisible)
|
||||||
event.kbd.keycode = event.kbd.ascii = 13;
|
event.kbd.keycode = event.kbd.ascii = 13;
|
||||||
else
|
else {
|
||||||
event.kbd.keycode = event.kbd.ascii = 319;
|
event.kbd.keycode = Common::KEYCODE_F5;
|
||||||
|
event.kbd.ascii = Common::ASCII_F5;
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (ev.button == GPC_VK_SELECT) {
|
if (ev.button == GPC_VK_SELECT) {
|
||||||
|
|
|
@ -49,6 +49,8 @@ protected:
|
||||||
uint16 *_tmpScreen, *_hwScreen;
|
uint16 *_tmpScreen, *_hwScreen;
|
||||||
OverlayColor *_overlayBuffer;
|
OverlayColor *_overlayBuffer;
|
||||||
|
|
||||||
|
Graphics::Surface _framebuffer;
|
||||||
|
|
||||||
int _overlayWidth, _overlayHeight;
|
int _overlayWidth, _overlayHeight;
|
||||||
bool _overlayVisible;
|
bool _overlayVisible;
|
||||||
uint32 _shakePos;
|
uint32 _shakePos;
|
||||||
|
@ -111,7 +113,8 @@ public:
|
||||||
void grabOverlay(OverlayColor *buf, int pitch);
|
void grabOverlay(OverlayColor *buf, int pitch);
|
||||||
void copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h);
|
void copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h);
|
||||||
|
|
||||||
bool grabRawScreen(Graphics::Surface *surf);
|
virtual Graphics::Surface *lockScreen();
|
||||||
|
virtual void unlockScreen();
|
||||||
|
|
||||||
int16 getOverlayHeight();
|
int16 getOverlayHeight();
|
||||||
int16 getOverlayWidth();
|
int16 getOverlayWidth();
|
||||||
|
|
|
@ -26,9 +26,10 @@
|
||||||
#include <hildon-widgets/hildon-app.h>
|
#include <hildon-widgets/hildon-app.h>
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
#include <libosso.h>
|
#include <libosso.h>
|
||||||
|
#include "base/internal_version.h"
|
||||||
|
|
||||||
#define OSSO_APP_NAME "scummvm"
|
#define OSSO_APP_NAME "scummvm"
|
||||||
#define OSSO_APP_VERSION "0.9.0CVS"
|
#define OSSO_APP_VERSION SCUMMVM_VERSION
|
||||||
#define OSSO_APP_SERVICE "org.scummvm."OSSO_APP_NAME
|
#define OSSO_APP_SERVICE "org.scummvm."OSSO_APP_NAME
|
||||||
#define OSSO_APP_OBJECT "/org/scummvm/"OSSO_APP_NAME
|
#define OSSO_APP_OBJECT "/org/scummvm/"OSSO_APP_NAME
|
||||||
#define OSSO_APP_IFACE "org.scummvm."OSSO_APP_NAME
|
#define OSSO_APP_IFACE "org.scummvm."OSSO_APP_NAME
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
|
|
||||||
#include "backends/platform/maemo/maemo-sdl.h"
|
#include "backends/platform/maemo/maemo-sdl.h"
|
||||||
#include "base/main.h"
|
#include "base/main.h"
|
||||||
|
#include "base/internal_version.h"
|
||||||
#include <hildon-widgets/hildon-app.h>
|
#include <hildon-widgets/hildon-app.h>
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
#include <libosso.h>
|
#include <libosso.h>
|
||||||
|
@ -41,7 +42,7 @@
|
||||||
#include <sys/resource.h>
|
#include <sys/resource.h>
|
||||||
|
|
||||||
#define OSSO_APP_NAME "scummvm"
|
#define OSSO_APP_NAME "scummvm"
|
||||||
#define OSSO_APP_VERSION "0.9.0CVS"
|
#define OSSO_APP_VERSION SCUMMVM_VERSION
|
||||||
|
|
||||||
void set_doubling(unsigned char enable) {
|
void set_doubling(unsigned char enable) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -838,7 +838,7 @@ bool OSystem_MorphOS::pollEvent(Common::Event &event)
|
||||||
/*
|
/*
|
||||||
* Function key
|
* Function key
|
||||||
*/
|
*/
|
||||||
event.kbd.ascii = (ScummMsg->Code-RAWKEY_F1)+315;
|
event.kbd.ascii = (ScummMsg->Code-RAWKEY_F1)+Common::ASCII_F1;
|
||||||
event.kbd.keycode = 0;
|
event.kbd.keycode = 0;
|
||||||
}
|
}
|
||||||
else if (ScummMsg->Code == RAWKEY_F11 || ScummMsg->Code == RAWKEY_F12)
|
else if (ScummMsg->Code == RAWKEY_F11 || ScummMsg->Code == RAWKEY_F12)
|
||||||
|
|
|
@ -63,7 +63,8 @@ public:
|
||||||
virtual void grabPalette(byte *colors, uint start, uint num);
|
virtual void grabPalette(byte *colors, uint start, uint num);
|
||||||
virtual void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h);
|
virtual void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h);
|
||||||
virtual void updateScreen();
|
virtual void updateScreen();
|
||||||
virtual bool grabRawScreen(Graphics::Surface *surf);
|
virtual Graphics::Surface *lockScreen();
|
||||||
|
virtual void unlockScreen();
|
||||||
virtual void setShakePos(int shakeOffset);
|
virtual void setShakePos(int shakeOffset);
|
||||||
|
|
||||||
virtual void showOverlay();
|
virtual void showOverlay();
|
||||||
|
@ -189,8 +190,11 @@ void OSystem_NULL::copyRectToScreen(const byte *buf, int pitch, int x, int y, in
|
||||||
void OSystem_NULL::updateScreen() {
|
void OSystem_NULL::updateScreen() {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OSystem_NULL::grabRawScreen(Graphics::Surface *surf) {
|
Graphics::Surface *OSystem_NULL::lockScreen() {
|
||||||
return false;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void OSystem_NULL::unlockScreen() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void OSystem_NULL::setShakePos(int shakeOffset) {
|
void OSystem_NULL::setShakePos(int shakeOffset) {
|
||||||
|
|
|
@ -364,13 +364,6 @@ void Gs2dScreen::copyScreenRect(const uint8 *buf, int pitch, int x, int y, int w
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Gs2dScreen::clearScreen(void) {
|
|
||||||
WaitSema(g_DmacSema);
|
|
||||||
memset(_screenBuf, 0, _width * _height);
|
|
||||||
_screenChanged = true;
|
|
||||||
SignalSema(g_DmacSema);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Gs2dScreen::setPalette(const uint32 *pal, uint8 start, uint16 num) {
|
void Gs2dScreen::setPalette(const uint32 *pal, uint8 start, uint16 num) {
|
||||||
assert(start + num <= 256);
|
assert(start + num <= 256);
|
||||||
|
|
||||||
|
@ -393,11 +386,20 @@ void Gs2dScreen::grabPalette(uint32 *pal, uint8 start, uint16 num) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Gs2dScreen::grabScreen(Graphics::Surface *surf) {
|
Graphics::Surface *Gs2dScreen::lockScreen() {
|
||||||
assert(surf);
|
|
||||||
WaitSema(g_DmacSema);
|
WaitSema(g_DmacSema);
|
||||||
surf->create(_width, _height, 1);
|
|
||||||
memcpy(surf->pixels, _screenBuf, _width * _height);
|
_framebuffer.pixels = _screen->pixels;
|
||||||
|
_framebuffer.w = _screen->w;
|
||||||
|
_framebuffer.h = _screen->h;
|
||||||
|
_framebuffer.pitch = _screen->pitch;
|
||||||
|
_framebuffer.bytesPerPixel = 1;
|
||||||
|
|
||||||
|
return &_framebuffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Gs2dScreen::unlockScreen() {
|
||||||
|
_screenChanged = true;
|
||||||
SignalSema(g_DmacSema);
|
SignalSema(g_DmacSema);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -56,13 +56,13 @@ public:
|
||||||
|
|
||||||
void copyPrintfOverlay(const uint8* buf);
|
void copyPrintfOverlay(const uint8* buf);
|
||||||
void clearPrintfOverlay(void);
|
void clearPrintfOverlay(void);
|
||||||
void clearScreen(void);
|
|
||||||
|
|
||||||
void copyScreenRect(const uint8 *buf, int pitch, int x, int y, int w, int h);
|
void copyScreenRect(const uint8 *buf, int pitch, int x, int y, int w, int h);
|
||||||
void setPalette(const uint32 *pal, uint8 start, uint16 num);
|
void setPalette(const uint32 *pal, uint8 start, uint16 num);
|
||||||
void updateScreen(void);
|
void updateScreen(void);
|
||||||
void grabPalette(uint32 *pal, uint8 start, uint16 num);
|
void grabPalette(uint32 *pal, uint8 start, uint16 num);
|
||||||
void grabScreen(Graphics::Surface *surf);
|
Graphics::Surface *lockScreen();
|
||||||
|
void unlockScreen();
|
||||||
//- overlay routines
|
//- overlay routines
|
||||||
void copyOverlayRect(const uint16 *buf, uint16 pitch, uint16 x, uint16 y, uint16 w, uint16 h);
|
void copyOverlayRect(const uint16 *buf, uint16 pitch, uint16 x, uint16 y, uint16 w, uint16 h);
|
||||||
void grabOverlay(uint16 *buf, uint16 pitch);
|
void grabOverlay(uint16 *buf, uint16 pitch);
|
||||||
|
@ -99,6 +99,8 @@ private:
|
||||||
uint32 _mouseScaleX, _mouseScaleY;
|
uint32 _mouseScaleX, _mouseScaleY;
|
||||||
uint8 _mTraCol;
|
uint8 _mTraCol;
|
||||||
|
|
||||||
|
Graphics::Surface _framebuffer;
|
||||||
|
|
||||||
int _shakePos;
|
int _shakePos;
|
||||||
|
|
||||||
bool _showMouse, _showOverlay, _screenChanged, _overlayChanged, _clutChanged;
|
bool _showMouse, _showOverlay, _screenChanged, _overlayChanged, _clutChanged;
|
||||||
|
|
|
@ -31,7 +31,6 @@
|
||||||
#include "backends/platform/ps2/ps2input.h"
|
#include "backends/platform/ps2/ps2input.h"
|
||||||
#include "backends/platform/ps2/ps2pad.h"
|
#include "backends/platform/ps2/ps2pad.h"
|
||||||
#include "backends/platform/ps2/systemps2.h"
|
#include "backends/platform/ps2/systemps2.h"
|
||||||
#include "backends/platform/ps2/sdlkeys.h"
|
|
||||||
#include "common/events.h"
|
#include "common/events.h"
|
||||||
#include "common/system.h"
|
#include "common/system.h"
|
||||||
|
|
||||||
|
@ -96,15 +95,15 @@ void Ps2Input::warpTo(uint16 x, uint16 y) {
|
||||||
#define PAD_CHECK_TIME 20
|
#define PAD_CHECK_TIME 20
|
||||||
|
|
||||||
int Ps2Input::mapKey(int key, int mod) { // copied from sdl backend
|
int Ps2Input::mapKey(int key, int mod) { // copied from sdl backend
|
||||||
if (key >= SDLK_F1 && key <= SDLK_F9) {
|
if (key >= Common::KEYCODE_F1 && key <= Common::KEYCODE_F9) {
|
||||||
return key - SDLK_F1 + 315;
|
return key - Common::KEYCODE_F1 + Common::ASCII_F1;
|
||||||
} else if (key >= SDLK_KP0 && key <= SDLK_KP9) {
|
} else if (key >= Common::KEYCODE_KP0 && key <= Common::KEYCODE_KP9) {
|
||||||
return key - SDLK_KP0 + '0';
|
return key - Common::KEYCODE_KP0 + '0';
|
||||||
} else if (key >= SDLK_UP && key <= SDLK_PAGEDOWN) {
|
} else if (key >= Common::KEYCODE_UP && key <= Common::KEYCODE_PAGEDOWN) {
|
||||||
return key;
|
return key;
|
||||||
} else if (key >= 'a' && key <= 'z' && mod & Common::KBD_SHIFT) {
|
} else if (key >= 'a' && key <= 'z' && mod & Common::KBD_SHIFT) {
|
||||||
return key & ~0x20;
|
return key & ~0x20;
|
||||||
} else if (key >= SDLK_NUMLOCK && key <= SDLK_EURO) {
|
} else if (key >= Common::KEYCODE_NUMLOCK && key <= Common::KEYCODE_EURO) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return key;
|
return key;
|
||||||
|
@ -142,17 +141,17 @@ bool Ps2Input::pollEvent(Common::Event *event) {
|
||||||
PS2KbdRawKey key;
|
PS2KbdRawKey key;
|
||||||
if (PS2KbdReadRaw(&key) == 1) {
|
if (PS2KbdReadRaw(&key) == 1) {
|
||||||
if (_usbToSdlk[key.key]) {
|
if (_usbToSdlk[key.key]) {
|
||||||
if ((_usbToSdlk[key.key] == SDLK_LSHIFT) || (_usbToSdlk[key.key] == SDLK_RSHIFT)) {
|
if ((_usbToSdlk[key.key] == Common::KEYCODE_LSHIFT) || (_usbToSdlk[key.key] == Common::KEYCODE_RSHIFT)) {
|
||||||
if (key.state & 1)
|
if (key.state & 1)
|
||||||
_keyFlags |= Common::KBD_SHIFT;
|
_keyFlags |= Common::KBD_SHIFT;
|
||||||
else
|
else
|
||||||
_keyFlags &= ~Common::KBD_SHIFT;
|
_keyFlags &= ~Common::KBD_SHIFT;
|
||||||
} else if ((_usbToSdlk[key.key] == SDLK_LCTRL) || (_usbToSdlk[key.key] == SDLK_RCTRL)) {
|
} else if ((_usbToSdlk[key.key] == Common::KEYCODE_LCTRL) || (_usbToSdlk[key.key] == Common::KEYCODE_RCTRL)) {
|
||||||
if (key.state & 1)
|
if (key.state & 1)
|
||||||
_keyFlags |= Common::KBD_CTRL;
|
_keyFlags |= Common::KBD_CTRL;
|
||||||
else
|
else
|
||||||
_keyFlags &= ~Common::KBD_CTRL;
|
_keyFlags &= ~Common::KBD_CTRL;
|
||||||
} else if ((_usbToSdlk[key.key] == SDLK_LALT) || (_usbToSdlk[key.key] == SDLK_RALT)) {
|
} else if ((_usbToSdlk[key.key] == Common::KEYCODE_LALT) || (_usbToSdlk[key.key] == Common::KEYCODE_RALT)) {
|
||||||
if (key.state & 1)
|
if (key.state & 1)
|
||||||
_keyFlags |= Common::KBD_ALT;
|
_keyFlags |= Common::KBD_ALT;
|
||||||
else
|
else
|
||||||
|
@ -256,106 +255,106 @@ const int Ps2Input::_usbToSdlk[0x100] = {
|
||||||
/* 01 */ 0,
|
/* 01 */ 0,
|
||||||
/* 02 */ 0,
|
/* 02 */ 0,
|
||||||
/* 03 */ 0,
|
/* 03 */ 0,
|
||||||
/* 04 */ SDLK_a,
|
/* 04 */ Common::KEYCODE_a,
|
||||||
/* 05 */ SDLK_b,
|
/* 05 */ Common::KEYCODE_b,
|
||||||
/* 06 */ SDLK_c,
|
/* 06 */ Common::KEYCODE_c,
|
||||||
/* 07 */ SDLK_d,
|
/* 07 */ Common::KEYCODE_d,
|
||||||
/* 08 */ SDLK_e,
|
/* 08 */ Common::KEYCODE_e,
|
||||||
/* 09 */ SDLK_f,
|
/* 09 */ Common::KEYCODE_f,
|
||||||
/* 0A */ SDLK_g,
|
/* 0A */ Common::KEYCODE_g,
|
||||||
/* 0B */ SDLK_h,
|
/* 0B */ Common::KEYCODE_h,
|
||||||
/* 0C */ SDLK_i,
|
/* 0C */ Common::KEYCODE_i,
|
||||||
/* 0D */ SDLK_j,
|
/* 0D */ Common::KEYCODE_j,
|
||||||
/* 0E */ SDLK_k,
|
/* 0E */ Common::KEYCODE_k,
|
||||||
/* 0F */ SDLK_l,
|
/* 0F */ Common::KEYCODE_l,
|
||||||
/* 10 */ SDLK_m,
|
/* 10 */ Common::KEYCODE_m,
|
||||||
/* 11 */ SDLK_n,
|
/* 11 */ Common::KEYCODE_n,
|
||||||
/* 12 */ SDLK_o,
|
/* 12 */ Common::KEYCODE_o,
|
||||||
/* 13 */ SDLK_p,
|
/* 13 */ Common::KEYCODE_p,
|
||||||
/* 14 */ SDLK_q,
|
/* 14 */ Common::KEYCODE_q,
|
||||||
/* 15 */ SDLK_r,
|
/* 15 */ Common::KEYCODE_r,
|
||||||
/* 16 */ SDLK_s,
|
/* 16 */ Common::KEYCODE_s,
|
||||||
/* 17 */ SDLK_t,
|
/* 17 */ Common::KEYCODE_t,
|
||||||
/* 18 */ SDLK_u,
|
/* 18 */ Common::KEYCODE_u,
|
||||||
/* 19 */ SDLK_v,
|
/* 19 */ Common::KEYCODE_v,
|
||||||
/* 1A */ SDLK_w,
|
/* 1A */ Common::KEYCODE_w,
|
||||||
/* 1B */ SDLK_x,
|
/* 1B */ Common::KEYCODE_x,
|
||||||
/* 1C */ SDLK_y,
|
/* 1C */ Common::KEYCODE_y,
|
||||||
/* 1D */ SDLK_z,
|
/* 1D */ Common::KEYCODE_z,
|
||||||
/* 1E */ SDLK_1,
|
/* 1E */ Common::KEYCODE_1,
|
||||||
/* 1F */ SDLK_2,
|
/* 1F */ Common::KEYCODE_2,
|
||||||
/* 20 */ SDLK_3,
|
/* 20 */ Common::KEYCODE_3,
|
||||||
/* 21 */ SDLK_4,
|
/* 21 */ Common::KEYCODE_4,
|
||||||
/* 22 */ SDLK_5,
|
/* 22 */ Common::KEYCODE_5,
|
||||||
/* 23 */ SDLK_6,
|
/* 23 */ Common::KEYCODE_6,
|
||||||
/* 24 */ SDLK_7,
|
/* 24 */ Common::KEYCODE_7,
|
||||||
/* 25 */ SDLK_8,
|
/* 25 */ Common::KEYCODE_8,
|
||||||
/* 26 */ SDLK_9,
|
/* 26 */ Common::KEYCODE_9,
|
||||||
/* 27 */ SDLK_0,
|
/* 27 */ Common::KEYCODE_0,
|
||||||
/* 28 */ SDLK_RETURN,
|
/* 28 */ Common::KEYCODE_RETURN,
|
||||||
/* 29 */ SDLK_ESCAPE,
|
/* 29 */ Common::KEYCODE_ESCAPE,
|
||||||
/* 2A */ SDLK_BACKSPACE,
|
/* 2A */ Common::KEYCODE_BACKSPACE,
|
||||||
/* 2B */ SDLK_TAB,
|
/* 2B */ Common::KEYCODE_TAB,
|
||||||
/* 2C */ SDLK_SPACE,
|
/* 2C */ Common::KEYCODE_SPACE,
|
||||||
/* 2D */ SDLK_MINUS,
|
/* 2D */ Common::KEYCODE_MINUS,
|
||||||
/* 2E */ SDLK_EQUALS,
|
/* 2E */ Common::KEYCODE_EQUALS,
|
||||||
/* 2F */ SDLK_LEFTBRACKET,
|
/* 2F */ Common::KEYCODE_LEFTBRACKET,
|
||||||
/* 30 */ SDLK_RIGHTBRACKET,
|
/* 30 */ Common::KEYCODE_RIGHTBRACKET,
|
||||||
/* 31 */ SDLK_BACKSLASH,
|
/* 31 */ Common::KEYCODE_BACKSLASH,
|
||||||
/* 32 */ SDLK_HASH,
|
/* 32 */ Common::KEYCODE_HASH,
|
||||||
/* 33 */ SDLK_SEMICOLON,
|
/* 33 */ Common::KEYCODE_SEMICOLON,
|
||||||
/* 34 */ SDLK_QUOTE,
|
/* 34 */ Common::KEYCODE_QUOTE,
|
||||||
/* 35 */ SDLK_BACKQUOTE,
|
/* 35 */ Common::KEYCODE_BACKQUOTE,
|
||||||
/* 36 */ SDLK_COMMA,
|
/* 36 */ Common::KEYCODE_COMMA,
|
||||||
/* 37 */ SDLK_PERIOD,
|
/* 37 */ Common::KEYCODE_PERIOD,
|
||||||
/* 38 */ SDLK_SLASH,
|
/* 38 */ Common::KEYCODE_SLASH,
|
||||||
/* 39 */ SDLK_CAPSLOCK,
|
/* 39 */ Common::KEYCODE_CAPSLOCK,
|
||||||
/* 3A */ SDLK_F1,
|
/* 3A */ Common::KEYCODE_F1,
|
||||||
/* 3B */ SDLK_F2,
|
/* 3B */ Common::KEYCODE_F2,
|
||||||
/* 3C */ SDLK_F3,
|
/* 3C */ Common::KEYCODE_F3,
|
||||||
/* 3D */ SDLK_F4,
|
/* 3D */ Common::KEYCODE_F4,
|
||||||
/* 3E */ SDLK_F5,
|
/* 3E */ Common::KEYCODE_F5,
|
||||||
/* 3F */ SDLK_F6,
|
/* 3F */ Common::KEYCODE_F6,
|
||||||
/* 40 */ SDLK_F7,
|
/* 40 */ Common::KEYCODE_F7,
|
||||||
/* 41 */ SDLK_F8,
|
/* 41 */ Common::KEYCODE_F8,
|
||||||
/* 42 */ SDLK_F9,
|
/* 42 */ Common::KEYCODE_F9,
|
||||||
/* 43 */ SDLK_F10,
|
/* 43 */ Common::KEYCODE_F10,
|
||||||
/* 44 */ SDLK_F11,
|
/* 44 */ Common::KEYCODE_F11,
|
||||||
/* 45 */ SDLK_F12,
|
/* 45 */ Common::KEYCODE_F12,
|
||||||
/* 46 */ SDLK_PRINT,
|
/* 46 */ Common::KEYCODE_PRINT,
|
||||||
/* 47 */ SDLK_SCROLLOCK,
|
/* 47 */ Common::KEYCODE_SCROLLOCK,
|
||||||
/* 48 */ SDLK_PAUSE,
|
/* 48 */ Common::KEYCODE_PAUSE,
|
||||||
/* 49 */ SDLK_INSERT,
|
/* 49 */ Common::KEYCODE_INSERT,
|
||||||
/* 4A */ SDLK_HOME,
|
/* 4A */ Common::KEYCODE_HOME,
|
||||||
/* 4B */ SDLK_PAGEUP,
|
/* 4B */ Common::KEYCODE_PAGEUP,
|
||||||
/* 4C */ SDLK_DELETE,
|
/* 4C */ Common::KEYCODE_DELETE,
|
||||||
/* 4D */ SDLK_END,
|
/* 4D */ Common::KEYCODE_END,
|
||||||
/* 4E */ SDLK_PAGEDOWN,
|
/* 4E */ Common::KEYCODE_PAGEDOWN,
|
||||||
/* 4F */ SDLK_RIGHT,
|
/* 4F */ Common::KEYCODE_RIGHT,
|
||||||
/* 50 */ SDLK_LEFT,
|
/* 50 */ Common::KEYCODE_LEFT,
|
||||||
/* 51 */ SDLK_DOWN,
|
/* 51 */ Common::KEYCODE_DOWN,
|
||||||
/* 52 */ SDLK_UP,
|
/* 52 */ Common::KEYCODE_UP,
|
||||||
/* 53 */ SDLK_NUMLOCK,
|
/* 53 */ Common::KEYCODE_NUMLOCK,
|
||||||
/* 54 */ SDLK_KP_DIVIDE,
|
/* 54 */ Common::KEYCODE_KP_DIVIDE,
|
||||||
/* 55 */ SDLK_KP_MULTIPLY,
|
/* 55 */ Common::KEYCODE_KP_MULTIPLY,
|
||||||
/* 56 */ SDLK_KP_MINUS,
|
/* 56 */ Common::KEYCODE_KP_MINUS,
|
||||||
/* 57 */ SDLK_KP_PLUS,
|
/* 57 */ Common::KEYCODE_KP_PLUS,
|
||||||
/* 58 */ SDLK_KP_ENTER,
|
/* 58 */ Common::KEYCODE_KP_ENTER,
|
||||||
/* 59 */ SDLK_KP1,
|
/* 59 */ Common::KEYCODE_KP1,
|
||||||
/* 5A */ SDLK_KP2,
|
/* 5A */ Common::KEYCODE_KP2,
|
||||||
/* 5B */ SDLK_KP3,
|
/* 5B */ Common::KEYCODE_KP3,
|
||||||
/* 5C */ SDLK_KP4,
|
/* 5C */ Common::KEYCODE_KP4,
|
||||||
/* 5D */ SDLK_KP5,
|
/* 5D */ Common::KEYCODE_KP5,
|
||||||
/* 5E */ SDLK_KP6,
|
/* 5E */ Common::KEYCODE_KP6,
|
||||||
/* 5F */ SDLK_KP7,
|
/* 5F */ Common::KEYCODE_KP7,
|
||||||
/* 60 */ SDLK_KP8,
|
/* 60 */ Common::KEYCODE_KP8,
|
||||||
/* 61 */ SDLK_KP9,
|
/* 61 */ Common::KEYCODE_KP9,
|
||||||
/* 62 */ SDLK_KP0,
|
/* 62 */ Common::KEYCODE_KP0,
|
||||||
/* 63 */ SDLK_KP_PERIOD,
|
/* 63 */ Common::KEYCODE_KP_PERIOD,
|
||||||
/* 64 */ 0,
|
/* 64 */ 0,
|
||||||
/* 65 */ 0,
|
/* 65 */ 0,
|
||||||
/* 66 */ 0,
|
/* 66 */ 0,
|
||||||
/* 67 */ SDLK_KP_EQUALS,
|
/* 67 */ Common::KEYCODE_KP_EQUALS,
|
||||||
/* 68 */ 0,
|
/* 68 */ 0,
|
||||||
/* 69 */ 0,
|
/* 69 */ 0,
|
||||||
/* 6A */ 0,
|
/* 6A */ 0,
|
||||||
|
@ -476,13 +475,13 @@ const int Ps2Input::_usbToSdlk[0x100] = {
|
||||||
/* DD */ 0,
|
/* DD */ 0,
|
||||||
/* DE */ 0,
|
/* DE */ 0,
|
||||||
/* DF */ 0,
|
/* DF */ 0,
|
||||||
/* E0 */ SDLK_LCTRL,
|
/* E0 */ Common::KEYCODE_LCTRL,
|
||||||
/* E1 */ SDLK_LSHIFT,
|
/* E1 */ Common::KEYCODE_LSHIFT,
|
||||||
/* E2 */ SDLK_LALT,
|
/* E2 */ Common::KEYCODE_LALT,
|
||||||
/* E3 */ 0,
|
/* E3 */ 0,
|
||||||
/* E4 */ SDLK_RCTRL,
|
/* E4 */ Common::KEYCODE_RCTRL,
|
||||||
/* E5 */ SDLK_RSHIFT,
|
/* E5 */ Common::KEYCODE_RSHIFT,
|
||||||
/* E6 */ SDLK_RALT,
|
/* E6 */ Common::KEYCODE_RALT,
|
||||||
/* E7 */ 0,
|
/* E7 */ 0,
|
||||||
/* E8 */ 0,
|
/* E8 */ 0,
|
||||||
/* E9 */ 0,
|
/* E9 */ 0,
|
||||||
|
@ -511,22 +510,22 @@ const int Ps2Input::_usbToSdlk[0x100] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
const int Ps2Input::_padCodes[16] = {
|
const int Ps2Input::_padCodes[16] = {
|
||||||
SDLK_1, // Select
|
Common::KEYCODE_1, // Select
|
||||||
0, // L3
|
0, // L3
|
||||||
0, // R3
|
0, // R3
|
||||||
SDLK_F5, // Start
|
Common::KEYCODE_F5, // Start
|
||||||
0, // Up
|
0, // Up
|
||||||
0, // Right
|
0, // Right
|
||||||
0, // Down
|
0, // Down
|
||||||
0, // Left
|
0, // Left
|
||||||
SDLK_KP0, // L2
|
Common::KEYCODE_KP0, // L2
|
||||||
0, // R2
|
0, // R2
|
||||||
SDLK_n, // L1
|
Common::KEYCODE_n, // L1
|
||||||
SDLK_y, // R1
|
Common::KEYCODE_y, // R1
|
||||||
SDLK_ESCAPE, // Triangle
|
Common::KEYCODE_ESCAPE, // Triangle
|
||||||
0, // Circle => Right mouse button
|
0, // Circle => Right mouse button
|
||||||
0, // Cross => Left mouse button
|
0, // Cross => Left mouse button
|
||||||
SDLK_RETURN // Square
|
Common::KEYCODE_RETURN // Square
|
||||||
};
|
};
|
||||||
|
|
||||||
const int Ps2Input::_padFlags[16] = {
|
const int Ps2Input::_padFlags[16] = {
|
||||||
|
|
|
@ -1,264 +0,0 @@
|
||||||
/* copied from SDK_keysym.h */
|
|
||||||
|
|
||||||
#ifndef __SDLKEYS_H__
|
|
||||||
#define __SDLKEYS_H__
|
|
||||||
|
|
||||||
enum SdlKeyCodes {
|
|
||||||
SDLK_UNKNOWN = 0,
|
|
||||||
SDLK_FIRST = 0,
|
|
||||||
SDLK_BACKSPACE = 8,
|
|
||||||
SDLK_TAB = 9,
|
|
||||||
SDLK_CLEAR = 12,
|
|
||||||
SDLK_RETURN = 13,
|
|
||||||
SDLK_PAUSE = 19,
|
|
||||||
SDLK_ESCAPE = 27,
|
|
||||||
SDLK_SPACE = 32,
|
|
||||||
SDLK_EXCLAIM = 33,
|
|
||||||
SDLK_QUOTEDBL = 34,
|
|
||||||
SDLK_HASH = 35,
|
|
||||||
SDLK_DOLLAR = 36,
|
|
||||||
SDLK_AMPERSAND = 38,
|
|
||||||
SDLK_QUOTE = 39,
|
|
||||||
SDLK_LEFTPAREN = 40,
|
|
||||||
SDLK_RIGHTPAREN = 41,
|
|
||||||
SDLK_ASTERISK = 42,
|
|
||||||
SDLK_PLUS = 43,
|
|
||||||
SDLK_COMMA = 44,
|
|
||||||
SDLK_MINUS = 45,
|
|
||||||
SDLK_PERIOD = 46,
|
|
||||||
SDLK_SLASH = 47,
|
|
||||||
SDLK_0 = 48,
|
|
||||||
SDLK_1 = 49,
|
|
||||||
SDLK_2 = 50,
|
|
||||||
SDLK_3 = 51,
|
|
||||||
SDLK_4 = 52,
|
|
||||||
SDLK_5 = 53,
|
|
||||||
SDLK_6 = 54,
|
|
||||||
SDLK_7 = 55,
|
|
||||||
SDLK_8 = 56,
|
|
||||||
SDLK_9 = 57,
|
|
||||||
SDLK_COLON = 58,
|
|
||||||
SDLK_SEMICOLON = 59,
|
|
||||||
SDLK_LESS = 60,
|
|
||||||
SDLK_EQUALS = 61,
|
|
||||||
SDLK_GREATER = 62,
|
|
||||||
SDLK_QUESTION = 63,
|
|
||||||
SDLK_AT = 64,
|
|
||||||
/*
|
|
||||||
Skip uppercase letters
|
|
||||||
*/
|
|
||||||
SDLK_LEFTBRACKET = 91,
|
|
||||||
SDLK_BACKSLASH = 92,
|
|
||||||
SDLK_RIGHTBRACKET = 93,
|
|
||||||
SDLK_CARET = 94,
|
|
||||||
SDLK_UNDERSCORE = 95,
|
|
||||||
SDLK_BACKQUOTE = 96,
|
|
||||||
SDLK_a = 97,
|
|
||||||
SDLK_b = 98,
|
|
||||||
SDLK_c = 99,
|
|
||||||
SDLK_d = 100,
|
|
||||||
SDLK_e = 101,
|
|
||||||
SDLK_f = 102,
|
|
||||||
SDLK_g = 103,
|
|
||||||
SDLK_h = 104,
|
|
||||||
SDLK_i = 105,
|
|
||||||
SDLK_j = 106,
|
|
||||||
SDLK_k = 107,
|
|
||||||
SDLK_l = 108,
|
|
||||||
SDLK_m = 109,
|
|
||||||
SDLK_n = 110,
|
|
||||||
SDLK_o = 111,
|
|
||||||
SDLK_p = 112,
|
|
||||||
SDLK_q = 113,
|
|
||||||
SDLK_r = 114,
|
|
||||||
SDLK_s = 115,
|
|
||||||
SDLK_t = 116,
|
|
||||||
SDLK_u = 117,
|
|
||||||
SDLK_v = 118,
|
|
||||||
SDLK_w = 119,
|
|
||||||
SDLK_x = 120,
|
|
||||||
SDLK_y = 121,
|
|
||||||
SDLK_z = 122,
|
|
||||||
SDLK_DELETE = 127,
|
|
||||||
/* End of ASCII mapped keysyms */
|
|
||||||
|
|
||||||
/* International keyboard syms */
|
|
||||||
SDLK_WORLD_0 = 160, /* 0xA0 */
|
|
||||||
SDLK_WORLD_1 = 161,
|
|
||||||
SDLK_WORLD_2 = 162,
|
|
||||||
SDLK_WORLD_3 = 163,
|
|
||||||
SDLK_WORLD_4 = 164,
|
|
||||||
SDLK_WORLD_5 = 165,
|
|
||||||
SDLK_WORLD_6 = 166,
|
|
||||||
SDLK_WORLD_7 = 167,
|
|
||||||
SDLK_WORLD_8 = 168,
|
|
||||||
SDLK_WORLD_9 = 169,
|
|
||||||
SDLK_WORLD_10 = 170,
|
|
||||||
SDLK_WORLD_11 = 171,
|
|
||||||
SDLK_WORLD_12 = 172,
|
|
||||||
SDLK_WORLD_13 = 173,
|
|
||||||
SDLK_WORLD_14 = 174,
|
|
||||||
SDLK_WORLD_15 = 175,
|
|
||||||
SDLK_WORLD_16 = 176,
|
|
||||||
SDLK_WORLD_17 = 177,
|
|
||||||
SDLK_WORLD_18 = 178,
|
|
||||||
SDLK_WORLD_19 = 179,
|
|
||||||
SDLK_WORLD_20 = 180,
|
|
||||||
SDLK_WORLD_21 = 181,
|
|
||||||
SDLK_WORLD_22 = 182,
|
|
||||||
SDLK_WORLD_23 = 183,
|
|
||||||
SDLK_WORLD_24 = 184,
|
|
||||||
SDLK_WORLD_25 = 185,
|
|
||||||
SDLK_WORLD_26 = 186,
|
|
||||||
SDLK_WORLD_27 = 187,
|
|
||||||
SDLK_WORLD_28 = 188,
|
|
||||||
SDLK_WORLD_29 = 189,
|
|
||||||
SDLK_WORLD_30 = 190,
|
|
||||||
SDLK_WORLD_31 = 191,
|
|
||||||
SDLK_WORLD_32 = 192,
|
|
||||||
SDLK_WORLD_33 = 193,
|
|
||||||
SDLK_WORLD_34 = 194,
|
|
||||||
SDLK_WORLD_35 = 195,
|
|
||||||
SDLK_WORLD_36 = 196,
|
|
||||||
SDLK_WORLD_37 = 197,
|
|
||||||
SDLK_WORLD_38 = 198,
|
|
||||||
SDLK_WORLD_39 = 199,
|
|
||||||
SDLK_WORLD_40 = 200,
|
|
||||||
SDLK_WORLD_41 = 201,
|
|
||||||
SDLK_WORLD_42 = 202,
|
|
||||||
SDLK_WORLD_43 = 203,
|
|
||||||
SDLK_WORLD_44 = 204,
|
|
||||||
SDLK_WORLD_45 = 205,
|
|
||||||
SDLK_WORLD_46 = 206,
|
|
||||||
SDLK_WORLD_47 = 207,
|
|
||||||
SDLK_WORLD_48 = 208,
|
|
||||||
SDLK_WORLD_49 = 209,
|
|
||||||
SDLK_WORLD_50 = 210,
|
|
||||||
SDLK_WORLD_51 = 211,
|
|
||||||
SDLK_WORLD_52 = 212,
|
|
||||||
SDLK_WORLD_53 = 213,
|
|
||||||
SDLK_WORLD_54 = 214,
|
|
||||||
SDLK_WORLD_55 = 215,
|
|
||||||
SDLK_WORLD_56 = 216,
|
|
||||||
SDLK_WORLD_57 = 217,
|
|
||||||
SDLK_WORLD_58 = 218,
|
|
||||||
SDLK_WORLD_59 = 219,
|
|
||||||
SDLK_WORLD_60 = 220,
|
|
||||||
SDLK_WORLD_61 = 221,
|
|
||||||
SDLK_WORLD_62 = 222,
|
|
||||||
SDLK_WORLD_63 = 223,
|
|
||||||
SDLK_WORLD_64 = 224,
|
|
||||||
SDLK_WORLD_65 = 225,
|
|
||||||
SDLK_WORLD_66 = 226,
|
|
||||||
SDLK_WORLD_67 = 227,
|
|
||||||
SDLK_WORLD_68 = 228,
|
|
||||||
SDLK_WORLD_69 = 229,
|
|
||||||
SDLK_WORLD_70 = 230,
|
|
||||||
SDLK_WORLD_71 = 231,
|
|
||||||
SDLK_WORLD_72 = 232,
|
|
||||||
SDLK_WORLD_73 = 233,
|
|
||||||
SDLK_WORLD_74 = 234,
|
|
||||||
SDLK_WORLD_75 = 235,
|
|
||||||
SDLK_WORLD_76 = 236,
|
|
||||||
SDLK_WORLD_77 = 237,
|
|
||||||
SDLK_WORLD_78 = 238,
|
|
||||||
SDLK_WORLD_79 = 239,
|
|
||||||
SDLK_WORLD_80 = 240,
|
|
||||||
SDLK_WORLD_81 = 241,
|
|
||||||
SDLK_WORLD_82 = 242,
|
|
||||||
SDLK_WORLD_83 = 243,
|
|
||||||
SDLK_WORLD_84 = 244,
|
|
||||||
SDLK_WORLD_85 = 245,
|
|
||||||
SDLK_WORLD_86 = 246,
|
|
||||||
SDLK_WORLD_87 = 247,
|
|
||||||
SDLK_WORLD_88 = 248,
|
|
||||||
SDLK_WORLD_89 = 249,
|
|
||||||
SDLK_WORLD_90 = 250,
|
|
||||||
SDLK_WORLD_91 = 251,
|
|
||||||
SDLK_WORLD_92 = 252,
|
|
||||||
SDLK_WORLD_93 = 253,
|
|
||||||
SDLK_WORLD_94 = 254,
|
|
||||||
SDLK_WORLD_95 = 255, /* 0xFF */
|
|
||||||
|
|
||||||
/* Numeric keypad */
|
|
||||||
SDLK_KP0 = 256,
|
|
||||||
SDLK_KP1 = 257,
|
|
||||||
SDLK_KP2 = 258,
|
|
||||||
SDLK_KP3 = 259,
|
|
||||||
SDLK_KP4 = 260,
|
|
||||||
SDLK_KP5 = 261,
|
|
||||||
SDLK_KP6 = 262,
|
|
||||||
SDLK_KP7 = 263,
|
|
||||||
SDLK_KP8 = 264,
|
|
||||||
SDLK_KP9 = 265,
|
|
||||||
SDLK_KP_PERIOD = 266,
|
|
||||||
SDLK_KP_DIVIDE = 267,
|
|
||||||
SDLK_KP_MULTIPLY = 268,
|
|
||||||
SDLK_KP_MINUS = 269,
|
|
||||||
SDLK_KP_PLUS = 270,
|
|
||||||
SDLK_KP_ENTER = 271,
|
|
||||||
SDLK_KP_EQUALS = 272,
|
|
||||||
|
|
||||||
/* Arrows + Home/End pad */
|
|
||||||
SDLK_UP = 273,
|
|
||||||
SDLK_DOWN = 274,
|
|
||||||
SDLK_RIGHT = 275,
|
|
||||||
SDLK_LEFT = 276,
|
|
||||||
SDLK_INSERT = 277,
|
|
||||||
SDLK_HOME = 278,
|
|
||||||
SDLK_END = 279,
|
|
||||||
SDLK_PAGEUP = 280,
|
|
||||||
SDLK_PAGEDOWN = 281,
|
|
||||||
|
|
||||||
/* Function keys */
|
|
||||||
SDLK_F1 = 282,
|
|
||||||
SDLK_F2 = 283,
|
|
||||||
SDLK_F3 = 284,
|
|
||||||
SDLK_F4 = 285,
|
|
||||||
SDLK_F5 = 286,
|
|
||||||
SDLK_F6 = 287,
|
|
||||||
SDLK_F7 = 288,
|
|
||||||
SDLK_F8 = 289,
|
|
||||||
SDLK_F9 = 290,
|
|
||||||
SDLK_F10 = 291,
|
|
||||||
SDLK_F11 = 292,
|
|
||||||
SDLK_F12 = 293,
|
|
||||||
SDLK_F13 = 294,
|
|
||||||
SDLK_F14 = 295,
|
|
||||||
SDLK_F15 = 296,
|
|
||||||
|
|
||||||
/* Key state modifier keys */
|
|
||||||
SDLK_NUMLOCK = 300,
|
|
||||||
SDLK_CAPSLOCK = 301,
|
|
||||||
SDLK_SCROLLOCK = 302,
|
|
||||||
SDLK_RSHIFT = 303,
|
|
||||||
SDLK_LSHIFT = 304,
|
|
||||||
SDLK_RCTRL = 305,
|
|
||||||
SDLK_LCTRL = 306,
|
|
||||||
SDLK_RALT = 307,
|
|
||||||
SDLK_LALT = 308,
|
|
||||||
SDLK_RMETA = 309,
|
|
||||||
SDLK_LMETA = 310,
|
|
||||||
SDLK_LSUPER = 311, /* Left "Windows" key */
|
|
||||||
SDLK_RSUPER = 312, /* Right "Windows" key */
|
|
||||||
SDLK_MODE = 313, /* "Alt Gr" key */
|
|
||||||
SDLK_COMPOSE = 314, /* Multi-key compose key */
|
|
||||||
|
|
||||||
/* Miscellaneous function keys */
|
|
||||||
SDLK_HELP = 315,
|
|
||||||
SDLK_PRINT = 316,
|
|
||||||
SDLK_SYSREQ = 317,
|
|
||||||
SDLK_BREAK = 318,
|
|
||||||
SDLK_MENU = 319,
|
|
||||||
SDLK_POWER = 320, /* Power Macintosh power key */
|
|
||||||
SDLK_EURO = 321, /* Some european keyboards */
|
|
||||||
SDLK_UNDO = 322, /* Atari keyboard has Undo */
|
|
||||||
|
|
||||||
/* Add any other keys here */
|
|
||||||
|
|
||||||
SDLK_LAST
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
|
@ -326,7 +326,7 @@ OSystem_PS2::OSystem_PS2(const char *elfPath) {
|
||||||
}
|
}
|
||||||
|
|
||||||
_screen->wantAnim(false);
|
_screen->wantAnim(false);
|
||||||
_screen->clearScreen();
|
clearScreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
OSystem_PS2::~OSystem_PS2(void) {
|
OSystem_PS2::~OSystem_PS2(void) {
|
||||||
|
@ -510,9 +510,12 @@ void OSystem_PS2::copyRectToScreen(const byte *buf, int pitch, int x, int y, int
|
||||||
_screen->copyScreenRect((const uint8*)buf, pitch, x, y, w, h);
|
_screen->copyScreenRect((const uint8*)buf, pitch, x, y, w, h);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OSystem_PS2::grabRawScreen(Graphics::Surface *surf) {
|
Graphics::Surface *OSystem_PS2::lockScreen() {
|
||||||
_screen->grabScreen(surf);
|
return _screen->lockScreen();
|
||||||
return true;
|
}
|
||||||
|
|
||||||
|
void OSystem_PS2::unlockScreen() {
|
||||||
|
_screen->unlockScreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
void OSystem_PS2::updateScreen(void) {
|
void OSystem_PS2::updateScreen(void) {
|
||||||
|
|
|
@ -56,7 +56,8 @@ public:
|
||||||
virtual void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h);
|
virtual void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h);
|
||||||
virtual void setShakePos(int shakeOffset);
|
virtual void setShakePos(int shakeOffset);
|
||||||
virtual void grabPalette(byte *colors, uint start, uint num);
|
virtual void grabPalette(byte *colors, uint start, uint num);
|
||||||
virtual bool grabRawScreen(Graphics::Surface *surf);
|
virtual Graphics::Surface *lockScreen();
|
||||||
|
virtual void unlockScreen();
|
||||||
virtual void updateScreen();
|
virtual void updateScreen();
|
||||||
|
|
||||||
virtual void showOverlay();
|
virtual void showOverlay();
|
||||||
|
|
|
@ -209,13 +209,18 @@ void OSystem_PSP::copyRectToScreen(const byte *buf, int pitch, int x, int y, int
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OSystem_PSP::grabRawScreen(Graphics::Surface *surf) {
|
Graphics::Surface *OSystem_PSP::lockScreen() {
|
||||||
assert(surf);
|
_framebuffer.pixels = _offscreen;
|
||||||
|
_framebuffer.w = _screenWidth;
|
||||||
|
_framebuffer.h = _screenHeight;
|
||||||
|
_framebuffer.pitch = _screenWidth;
|
||||||
|
_framebuffer.bytesPerPixel = 1;
|
||||||
|
|
||||||
surf->create(_screenWidth, _screenHeight, 1);
|
return &_framebuffer;
|
||||||
memcpy(surf->pixels, _offscreen, _screenWidth * _screenHeight);
|
}
|
||||||
|
|
||||||
return true;
|
void OSystem_PSP::unlockScreen() {
|
||||||
|
// The screen is always completely update anyway, so we don't have to force a full update here.
|
||||||
}
|
}
|
||||||
|
|
||||||
void OSystem_PSP::updateScreen() {
|
void OSystem_PSP::updateScreen() {
|
||||||
|
@ -442,19 +447,19 @@ bool OSystem_PSP::pollEvent(Common::Event &event) {
|
||||||
event.kbd.flags = 0;
|
event.kbd.flags = 0;
|
||||||
|
|
||||||
if (buttonsChanged & PSP_CTRL_LTRIGGER) {
|
if (buttonsChanged & PSP_CTRL_LTRIGGER) {
|
||||||
event.kbd.keycode = SDLK_ESCAPE;
|
event.kbd.keycode = Common::KEYCODE_ESCAPE;
|
||||||
event.kbd.ascii = 27;
|
event.kbd.ascii = 27;
|
||||||
} else if (buttonsChanged & PSP_CTRL_RTRIGGER) {
|
} else if (buttonsChanged & PSP_CTRL_RTRIGGER) {
|
||||||
event.kbd.keycode = SDLK_RETURN;
|
event.kbd.keycode = Common::KEYCODE_RETURN;
|
||||||
event.kbd.ascii = 13;
|
event.kbd.ascii = 13;
|
||||||
} else if (buttonsChanged & PSP_CTRL_START) {
|
} else if (buttonsChanged & PSP_CTRL_START) {
|
||||||
event.kbd.keycode = SDLK_F5;
|
event.kbd.keycode = Common::KEYCODE_F5;
|
||||||
event.kbd.ascii = 319;
|
event.kbd.ascii = Common::ASCII_F5;
|
||||||
/* } else if (buttonsChanged & PSP_CTRL_SELECT) {
|
/* } else if (buttonsChanged & PSP_CTRL_SELECT) {
|
||||||
event.kbd.keycode = SDLK_0;
|
event.kbd.keycode = Common::KEYCODE_0;
|
||||||
event.kbd.ascii = '0';
|
event.kbd.ascii = '0';
|
||||||
*/ } else if (buttonsChanged & PSP_CTRL_SQUARE) {
|
*/ } else if (buttonsChanged & PSP_CTRL_SQUARE) {
|
||||||
event.kbd.keycode = SDLK_PERIOD;
|
event.kbd.keycode = Common::KEYCODE_PERIOD;
|
||||||
event.kbd.ascii = '.';
|
event.kbd.ascii = '.';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include "common/scummsys.h"
|
#include "common/scummsys.h"
|
||||||
#include "common/system.h"
|
#include "common/system.h"
|
||||||
#include "backends/intern.h"
|
#include "backends/intern.h"
|
||||||
|
#include "graphics/surface.h"
|
||||||
|
|
||||||
#include <SDL.h>
|
#include <SDL.h>
|
||||||
|
|
||||||
|
@ -62,6 +63,7 @@ protected:
|
||||||
bool _overlayVisible;
|
bool _overlayVisible;
|
||||||
uint32 _shakePos;
|
uint32 _shakePos;
|
||||||
|
|
||||||
|
Graphics::Surface _framebuffer;
|
||||||
|
|
||||||
bool _mouseVisible;
|
bool _mouseVisible;
|
||||||
int _mouseX, _mouseY;
|
int _mouseX, _mouseY;
|
||||||
|
@ -101,7 +103,8 @@ public:
|
||||||
virtual int16 getHeight();
|
virtual int16 getHeight();
|
||||||
virtual void setPalette(const byte *colors, uint start, uint num);
|
virtual void setPalette(const byte *colors, uint start, uint num);
|
||||||
virtual void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h);
|
virtual void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h);
|
||||||
virtual bool grabRawScreen(Graphics::Surface *surf);
|
virtual Graphics::Surface *lockScreen();
|
||||||
|
virtual void unlockScreen();
|
||||||
virtual void updateScreen();
|
virtual void updateScreen();
|
||||||
virtual void setShakePos(int shakeOffset);
|
virtual void setShakePos(int shakeOffset);
|
||||||
|
|
||||||
|
|
|
@ -59,11 +59,11 @@ unsigned char *keyboard_letters;
|
||||||
unsigned char *keyboard_letters_shift;
|
unsigned char *keyboard_letters_shift;
|
||||||
|
|
||||||
unsigned char kbd_ascii[] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', '[', ']', '\\', ';', '\'', ',', '.', '/', '`'};
|
unsigned char kbd_ascii[] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', '[', ']', '\\', ';', '\'', ',', '.', '/', '`'};
|
||||||
unsigned int kbd_code[] = {SDLK_1, SDLK_2, SDLK_3, SDLK_4, SDLK_5, SDLK_6, SDLK_7, SDLK_8, SDLK_9, SDLK_0, SDLK_MINUS, SDLK_EQUALS, SDLK_LEFTBRACKET, SDLK_RIGHTBRACKET,
|
Common::KeyCode kbd_code[] = {Common::KEYCODE_1, Common::KEYCODE_2, Common::KEYCODE_3, Common::KEYCODE_4, Common::KEYCODE_5, Common::KEYCODE_6, Common::KEYCODE_7, Common::KEYCODE_8, Common::KEYCODE_9, Common::KEYCODE_0, Common::KEYCODE_MINUS, Common::KEYCODE_EQUALS, Common::KEYCODE_LEFTBRACKET, Common::KEYCODE_RIGHTBRACKET,
|
||||||
SDLK_BACKSLASH, SDLK_SEMICOLON, SDLK_QUOTE, SDLK_COMMA, SDLK_PERIOD, SDLK_SLASH, SDLK_BACKQUOTE};
|
Common::KEYCODE_BACKSLASH, Common::KEYCODE_SEMICOLON, Common::KEYCODE_QUOTE, Common::KEYCODE_COMMA, Common::KEYCODE_PERIOD, Common::KEYCODE_SLASH, Common::KEYCODE_BACKQUOTE};
|
||||||
unsigned char kbd_ascii_cl[] = {'!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', '{', '}', '|', ':', '"', '<', '>', '?', '~'};
|
unsigned char kbd_ascii_cl[] = {'!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', '{', '}', '|', ':', '"', '<', '>', '?', '~'};
|
||||||
unsigned int kbd_code_cl[] = {SDLK_EXCLAIM, SDLK_AT, SDLK_HASH, SDLK_DOLLAR, 37, SDLK_CARET, SDLK_AMPERSAND, SDLK_ASTERISK, SDLK_LEFTPAREN, SDLK_RIGHTPAREN, SDLK_UNDERSCORE,
|
Common::KeyCode kbd_code_cl[] = {Common::KEYCODE_EXCLAIM, Common::KEYCODE_AT, Common::KEYCODE_HASH, Common::KEYCODE_DOLLAR, (Common::KeyCode)37, Common::KEYCODE_CARET, Common::KEYCODE_AMPERSAND, Common::KEYCODE_ASTERISK, Common::KEYCODE_LEFTPAREN, Common::KEYCODE_RIGHTPAREN, Common::KEYCODE_UNDERSCORE,
|
||||||
SDLK_PLUS, 123, 125, 124, SDLK_COLON, SDLK_QUOTEDBL, SDLK_LESS, SDLK_GREATER, SDLK_QUESTION, 126};
|
Common::KEYCODE_PLUS, (Common::KeyCode)123, (Common::KeyCode)125, (Common::KeyCode)124, Common::KEYCODE_COLON, Common::KEYCODE_QUOTEDBL, Common::KEYCODE_LESS, Common::KEYCODE_GREATER, Common::KEYCODE_QUESTION, (Common::KeyCode)126};
|
||||||
#define CAPS_LOCK (1 << 0)
|
#define CAPS_LOCK (1 << 0)
|
||||||
#define SYMBOLS (1 << 1)
|
#define SYMBOLS (1 << 1)
|
||||||
|
|
||||||
|
@ -487,7 +487,7 @@ bool OSystem_PSP_GU::pollEvent(Common::Event &event) {
|
||||||
if ( (buttonsChanged & PSP_CTRL_LEFT) && !(pad.Buttons & PSP_CTRL_LEFT)) {
|
if ( (buttonsChanged & PSP_CTRL_LEFT) && !(pad.Buttons & PSP_CTRL_LEFT)) {
|
||||||
event.kbd.flags = 0;
|
event.kbd.flags = 0;
|
||||||
event.kbd.ascii = 0;
|
event.kbd.ascii = 0;
|
||||||
event.kbd.keycode = SDLK_LEFT;
|
event.kbd.keycode = Common::KEYCODE_LEFT;
|
||||||
_prevButtons = pad.Buttons;
|
_prevButtons = pad.Buttons;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -495,7 +495,7 @@ bool OSystem_PSP_GU::pollEvent(Common::Event &event) {
|
||||||
if ( (buttonsChanged & PSP_CTRL_RIGHT) && !(pad.Buttons & PSP_CTRL_RIGHT)) {
|
if ( (buttonsChanged & PSP_CTRL_RIGHT) && !(pad.Buttons & PSP_CTRL_RIGHT)) {
|
||||||
event.kbd.flags = 0;
|
event.kbd.flags = 0;
|
||||||
event.kbd.ascii = 0;
|
event.kbd.ascii = 0;
|
||||||
event.kbd.keycode = SDLK_RIGHT;
|
event.kbd.keycode = Common::KEYCODE_RIGHT;
|
||||||
_prevButtons = pad.Buttons;
|
_prevButtons = pad.Buttons;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -503,7 +503,7 @@ bool OSystem_PSP_GU::pollEvent(Common::Event &event) {
|
||||||
if ( (buttonsChanged & PSP_CTRL_UP) && !(pad.Buttons & PSP_CTRL_UP)) {
|
if ( (buttonsChanged & PSP_CTRL_UP) && !(pad.Buttons & PSP_CTRL_UP)) {
|
||||||
event.kbd.flags = 0;
|
event.kbd.flags = 0;
|
||||||
event.kbd.ascii = 0;
|
event.kbd.ascii = 0;
|
||||||
event.kbd.keycode = SDLK_UP;
|
event.kbd.keycode = Common::KEYCODE_UP;
|
||||||
_prevButtons = pad.Buttons;
|
_prevButtons = pad.Buttons;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -511,7 +511,7 @@ bool OSystem_PSP_GU::pollEvent(Common::Event &event) {
|
||||||
if ( (buttonsChanged & PSP_CTRL_DOWN) && !(pad.Buttons & PSP_CTRL_DOWN)) {
|
if ( (buttonsChanged & PSP_CTRL_DOWN) && !(pad.Buttons & PSP_CTRL_DOWN)) {
|
||||||
event.kbd.flags = 0;
|
event.kbd.flags = 0;
|
||||||
event.kbd.ascii = 0;
|
event.kbd.ascii = 0;
|
||||||
event.kbd.keycode = SDLK_DOWN;
|
event.kbd.keycode = Common::KEYCODE_DOWN;
|
||||||
_prevButtons = pad.Buttons;
|
_prevButtons = pad.Buttons;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -535,19 +535,19 @@ bool OSystem_PSP_GU::pollEvent(Common::Event &event) {
|
||||||
switch(_keySelected) {
|
switch(_keySelected) {
|
||||||
case 27:
|
case 27:
|
||||||
event.kbd.ascii = ' ';
|
event.kbd.ascii = ' ';
|
||||||
event.kbd.keycode = SDLK_SPACE;
|
event.kbd.keycode = Common::KEYCODE_SPACE;
|
||||||
break;
|
break;
|
||||||
case 28:
|
case 28:
|
||||||
event.kbd.ascii = 127;
|
event.kbd.ascii = 127;
|
||||||
event.kbd.keycode = SDLK_DELETE;
|
event.kbd.keycode = Common::KEYCODE_DELETE;
|
||||||
break;
|
break;
|
||||||
case 29:
|
case 29:
|
||||||
event.kbd.ascii = 8;
|
event.kbd.ascii = 8;
|
||||||
event.kbd.keycode = SDLK_BACKSPACE;
|
event.kbd.keycode = Common::KEYCODE_BACKSPACE;
|
||||||
break;
|
break;
|
||||||
case 30:
|
case 30:
|
||||||
event.kbd.ascii = 13;
|
event.kbd.ascii = 13;
|
||||||
event.kbd.keycode = SDLK_RETURN;
|
event.kbd.keycode = Common::KEYCODE_RETURN;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -555,11 +555,11 @@ bool OSystem_PSP_GU::pollEvent(Common::Event &event) {
|
||||||
case 0:
|
case 0:
|
||||||
event.kbd.flags = 0;
|
event.kbd.flags = 0;
|
||||||
event.kbd.ascii = 'a'+_keySelected-1;
|
event.kbd.ascii = 'a'+_keySelected-1;
|
||||||
event.kbd.keycode = SDLK_a + _keySelected-1;
|
event.kbd.keycode = (Common::KeyCode)(Common::KEYCODE_a + _keySelected-1);
|
||||||
break;
|
break;
|
||||||
case CAPS_LOCK:
|
case CAPS_LOCK:
|
||||||
event.kbd.ascii = 'A'+_keySelected-1;
|
event.kbd.ascii = 'A'+_keySelected-1;
|
||||||
event.kbd.keycode = SDLK_a + _keySelected-1;
|
event.kbd.keycode = (Common::KeyCode)(Common::KEYCODE_a + _keySelected-1);
|
||||||
event.kbd.flags = Common::KBD_SHIFT;
|
event.kbd.flags = Common::KBD_SHIFT;
|
||||||
break;
|
break;
|
||||||
case SYMBOLS:
|
case SYMBOLS:
|
||||||
|
|
|
@ -52,14 +52,14 @@
|
||||||
static int mapKey(SDLKey key, SDLMod mod, Uint16 unicode)
|
static int mapKey(SDLKey key, SDLMod mod, Uint16 unicode)
|
||||||
{
|
{
|
||||||
if (key >= SDLK_F1 && key <= SDLK_F9) {
|
if (key >= SDLK_F1 && key <= SDLK_F9) {
|
||||||
return key - SDLK_F1 + 315;
|
return key - SDLK_F1 + Common::ASCII_F1;
|
||||||
} else if (key >= SDLK_KP0 && key <= SDLK_KP9) {
|
} else if (key >= SDLK_KP0 && key <= SDLK_KP9) {
|
||||||
return key - SDLK_KP0 + '0';
|
return key - SDLK_KP0 + '0';
|
||||||
} else if (key >= SDLK_UP && key <= SDLK_PAGEDOWN) {
|
} else if (key >= SDLK_UP && key <= SDLK_PAGEDOWN) {
|
||||||
return key;
|
return key;
|
||||||
} else if (unicode) {
|
} else if (unicode) {
|
||||||
return unicode;
|
return unicode;
|
||||||
} else if (key >= 'a' && key <= 'z' && mod & KMOD_SHIFT) {
|
} else if (key >= 'a' && key <= 'z' && (mod & KMOD_SHIFT)) {
|
||||||
return key & ~0x20;
|
return key & ~0x20;
|
||||||
} else if (key >= SDLK_NUMLOCK && key <= SDLK_EURO) {
|
} else if (key >= SDLK_NUMLOCK && key <= SDLK_EURO) {
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -265,7 +265,7 @@ bool OSystem_SDL::pollEvent(Common::Event &event) {
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
event.type = Common::EVENT_KEYDOWN;
|
event.type = Common::EVENT_KEYDOWN;
|
||||||
event.kbd.keycode = ev.key.keysym.sym;
|
event.kbd.keycode = (Common::KeyCode)ev.key.keysym.sym;
|
||||||
event.kbd.ascii = mapKey(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode);
|
event.kbd.ascii = mapKey(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -278,7 +278,7 @@ bool OSystem_SDL::pollEvent(Common::Event &event) {
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
event.type = Common::EVENT_KEYUP;
|
event.type = Common::EVENT_KEYUP;
|
||||||
event.kbd.keycode = ev.key.keysym.sym;
|
event.kbd.keycode = (Common::KeyCode)ev.key.keysym.sym;
|
||||||
event.kbd.ascii = mapKey(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode);
|
event.kbd.ascii = mapKey(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode);
|
||||||
b = event.kbd.flags = SDLModToOSystemKeyFlags(SDL_GetModState());
|
b = event.kbd.flags = SDLModToOSystemKeyFlags(SDL_GetModState());
|
||||||
|
|
||||||
|
@ -337,19 +337,19 @@ bool OSystem_SDL::pollEvent(Common::Event &event) {
|
||||||
event.type = Common::EVENT_KEYDOWN;
|
event.type = Common::EVENT_KEYDOWN;
|
||||||
switch (ev.jbutton.button) {
|
switch (ev.jbutton.button) {
|
||||||
case JOY_BUT_ESCAPE:
|
case JOY_BUT_ESCAPE:
|
||||||
event.kbd.keycode = SDLK_ESCAPE;
|
event.kbd.keycode = Common::KEYCODE_ESCAPE;
|
||||||
event.kbd.ascii = mapKey(SDLK_ESCAPE, ev.key.keysym.mod, 0);
|
event.kbd.ascii = mapKey(SDLK_ESCAPE, ev.key.keysym.mod, 0);
|
||||||
break;
|
break;
|
||||||
case JOY_BUT_PERIOD:
|
case JOY_BUT_PERIOD:
|
||||||
event.kbd.keycode = SDLK_PERIOD;
|
event.kbd.keycode = Common::KEYCODE_PERIOD;
|
||||||
event.kbd.ascii = mapKey(SDLK_PERIOD, ev.key.keysym.mod, 0);
|
event.kbd.ascii = mapKey(SDLK_PERIOD, ev.key.keysym.mod, 0);
|
||||||
break;
|
break;
|
||||||
case JOY_BUT_SPACE:
|
case JOY_BUT_SPACE:
|
||||||
event.kbd.keycode = SDLK_SPACE;
|
event.kbd.keycode = Common::KEYCODE_SPACE;
|
||||||
event.kbd.ascii = mapKey(SDLK_SPACE, ev.key.keysym.mod, 0);
|
event.kbd.ascii = mapKey(SDLK_SPACE, ev.key.keysym.mod, 0);
|
||||||
break;
|
break;
|
||||||
case JOY_BUT_F5:
|
case JOY_BUT_F5:
|
||||||
event.kbd.keycode = SDLK_F5;
|
event.kbd.keycode = Common::KEYCODE_F5;
|
||||||
event.kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0);
|
event.kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -367,19 +367,19 @@ bool OSystem_SDL::pollEvent(Common::Event &event) {
|
||||||
event.type = Common::EVENT_KEYUP;
|
event.type = Common::EVENT_KEYUP;
|
||||||
switch (ev.jbutton.button) {
|
switch (ev.jbutton.button) {
|
||||||
case JOY_BUT_ESCAPE:
|
case JOY_BUT_ESCAPE:
|
||||||
event.kbd.keycode = SDLK_ESCAPE;
|
event.kbd.keycode = Common::KEYCODE_ESCAPE;
|
||||||
event.kbd.ascii = mapKey(SDLK_ESCAPE, ev.key.keysym.mod, 0);
|
event.kbd.ascii = mapKey(SDLK_ESCAPE, ev.key.keysym.mod, 0);
|
||||||
break;
|
break;
|
||||||
case JOY_BUT_PERIOD:
|
case JOY_BUT_PERIOD:
|
||||||
event.kbd.keycode = SDLK_PERIOD;
|
event.kbd.keycode = Common::KEYCODE_PERIOD;
|
||||||
event.kbd.ascii = mapKey(SDLK_PERIOD, ev.key.keysym.mod, 0);
|
event.kbd.ascii = mapKey(SDLK_PERIOD, ev.key.keysym.mod, 0);
|
||||||
break;
|
break;
|
||||||
case JOY_BUT_SPACE:
|
case JOY_BUT_SPACE:
|
||||||
event.kbd.keycode = SDLK_SPACE;
|
event.kbd.keycode = Common::KEYCODE_SPACE;
|
||||||
event.kbd.ascii = mapKey(SDLK_SPACE, ev.key.keysym.mod, 0);
|
event.kbd.ascii = mapKey(SDLK_SPACE, ev.key.keysym.mod, 0);
|
||||||
break;
|
break;
|
||||||
case JOY_BUT_F5:
|
case JOY_BUT_F5:
|
||||||
event.kbd.keycode = SDLK_F5;
|
event.kbd.keycode = Common::KEYCODE_F5;
|
||||||
event.kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0);
|
event.kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -455,21 +455,21 @@ bool OSystem_SDL::remapKey(SDL_Event &ev,Common::Event &event) {
|
||||||
// Map menu key to f5 (scumm menu)
|
// Map menu key to f5 (scumm menu)
|
||||||
if (ev.key.keysym.sym == 306) {
|
if (ev.key.keysym.sym == 306) {
|
||||||
event.type = Common::EVENT_KEYDOWN;
|
event.type = Common::EVENT_KEYDOWN;
|
||||||
event.kbd.keycode = SDLK_F5;
|
event.kbd.keycode = Common::KEYCODE_F5;
|
||||||
event.kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0);
|
event.kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
// Map action key to action
|
// Map action key to action
|
||||||
if (ev.key.keysym.sym == 291) {
|
if (ev.key.keysym.sym == 291) {
|
||||||
event.type = Common::EVENT_KEYDOWN;
|
event.type = Common::EVENT_KEYDOWN;
|
||||||
event.kbd.keycode = SDLK_TAB;
|
event.kbd.keycode = Common::KEYCODE_TAB;
|
||||||
event.kbd.ascii = mapKey(SDLK_TAB, ev.key.keysym.mod, 0);
|
event.kbd.ascii = mapKey(SDLK_TAB, ev.key.keysym.mod, 0);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
// Map OK key to skip cinematic
|
// Map OK key to skip cinematic
|
||||||
if (ev.key.keysym.sym == 292) {
|
if (ev.key.keysym.sym == 292) {
|
||||||
event.type = Common::EVENT_KEYDOWN;
|
event.type = Common::EVENT_KEYDOWN;
|
||||||
event.kbd.keycode = SDLK_ESCAPE;
|
event.kbd.keycode = Common::KEYCODE_ESCAPE;
|
||||||
event.kbd.ascii = mapKey(SDLK_ESCAPE, ev.key.keysym.mod, 0);
|
event.kbd.ascii = mapKey(SDLK_ESCAPE, ev.key.keysym.mod, 0);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -485,7 +485,7 @@ bool OSystem_SDL::remapKey(SDL_Event &ev,Common::Event &event) {
|
||||||
// Map menu key (f11) to f5 (scumm menu)
|
// Map menu key (f11) to f5 (scumm menu)
|
||||||
if (ev.key.keysym.sym == SDLK_F11) {
|
if (ev.key.keysym.sym == SDLK_F11) {
|
||||||
event.type = Common::EVENT_KEYDOWN;
|
event.type = Common::EVENT_KEYDOWN;
|
||||||
event.kbd.keycode = SDLK_F5;
|
event.kbd.keycode = Common::KEYCODE_F5;
|
||||||
event.kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0);
|
event.kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0);
|
||||||
}
|
}
|
||||||
// Nap center (space) to tab (default action )
|
// Nap center (space) to tab (default action )
|
||||||
|
@ -493,13 +493,13 @@ bool OSystem_SDL::remapKey(SDL_Event &ev,Common::Event &event) {
|
||||||
//
|
//
|
||||||
else if (ev.key.keysym.sym == SDLK_SPACE) {
|
else if (ev.key.keysym.sym == SDLK_SPACE) {
|
||||||
event.type = Common::EVENT_KEYDOWN;
|
event.type = Common::EVENT_KEYDOWN;
|
||||||
event.kbd.keycode = SDLK_TAB;
|
event.kbd.keycode = Common::KEYCODE_TAB;
|
||||||
event.kbd.ascii = mapKey(SDLK_TAB, ev.key.keysym.mod, 0);
|
event.kbd.ascii = mapKey(SDLK_TAB, ev.key.keysym.mod, 0);
|
||||||
}
|
}
|
||||||
// Since we stole space (pause) above we'll rebind it to the tab key on the keyboard
|
// Since we stole space (pause) above we'll rebind it to the tab key on the keyboard
|
||||||
else if (ev.key.keysym.sym == SDLK_TAB) {
|
else if (ev.key.keysym.sym == SDLK_TAB) {
|
||||||
event.type = Common::EVENT_KEYDOWN;
|
event.type = Common::EVENT_KEYDOWN;
|
||||||
event.kbd.keycode = SDLK_SPACE;
|
event.kbd.keycode = Common::KEYCODE_SPACE;
|
||||||
event.kbd.ascii = mapKey(SDLK_SPACE, ev.key.keysym.mod, 0);
|
event.kbd.ascii = mapKey(SDLK_SPACE, ev.key.keysym.mod, 0);
|
||||||
} else {
|
} else {
|
||||||
// Let the events fall through if we didn't change them, this may not be the best way to
|
// Let the events fall through if we didn't change them, this may not be the best way to
|
||||||
|
|
|
@ -761,22 +761,6 @@ void OSystem_SDL::setAspectRatioCorrection(bool enable) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void OSystem_SDL::clearScreen() {
|
|
||||||
assert (_transactionMode == kTransactionNone);
|
|
||||||
|
|
||||||
// Try to lock the screen surface
|
|
||||||
if (SDL_LockSurface(_screen) == -1)
|
|
||||||
error("SDL_LockSurface failed: %s", SDL_GetError());
|
|
||||||
|
|
||||||
byte *dst = (byte *)_screen->pixels;
|
|
||||||
|
|
||||||
// Clear the screen
|
|
||||||
memset(dst, 0, _screenWidth * _screenHeight);
|
|
||||||
|
|
||||||
// Unlock the screen surface
|
|
||||||
SDL_UnlockSurface(_screen);
|
|
||||||
}
|
|
||||||
|
|
||||||
void OSystem_SDL::copyRectToScreen(const byte *src, int pitch, int x, int y, int w, int h) {
|
void OSystem_SDL::copyRectToScreen(const byte *src, int pitch, int x, int y, int w, int h) {
|
||||||
assert (_transactionMode == kTransactionNone);
|
assert (_transactionMode == kTransactionNone);
|
||||||
assert(src);
|
assert(src);
|
||||||
|
@ -848,24 +832,44 @@ void OSystem_SDL::copyRectToScreen(const byte *src, int pitch, int x, int y, int
|
||||||
SDL_UnlockSurface(_screen);
|
SDL_UnlockSurface(_screen);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OSystem_SDL::grabRawScreen(Graphics::Surface *surf) {
|
Graphics::Surface *OSystem_SDL::lockScreen() {
|
||||||
assert(_screen);
|
assert (_transactionMode == kTransactionNone);
|
||||||
assert(surf);
|
|
||||||
|
|
||||||
Common::StackLock lock(_graphicsMutex); // Lock the mutex until this function ends
|
// Lock the graphics mutex
|
||||||
|
lockMutex(_graphicsMutex);
|
||||||
|
|
||||||
surf->create(_screenWidth, _screenHeight, _screen->format->BytesPerPixel);
|
// paranoia check
|
||||||
|
assert(!_screenIsLocked);
|
||||||
|
_screenIsLocked = true;
|
||||||
|
|
||||||
// Try to lock the screen surface
|
// Try to lock the screen surface
|
||||||
if (SDL_LockSurface(_screen) == -1)
|
if (SDL_LockSurface(_screen) == -1)
|
||||||
error("SDL_LockSurface failed: %s", SDL_GetError());
|
error("SDL_LockSurface failed: %s", SDL_GetError());
|
||||||
|
|
||||||
memcpy(surf->pixels, _screen->pixels, _screenWidth * _screenHeight * _screen->format->BytesPerPixel);
|
_framebuffer.pixels = _screen->pixels;
|
||||||
|
_framebuffer.w = _screen->w;
|
||||||
|
_framebuffer.h = _screen->h;
|
||||||
|
_framebuffer.pitch = _screen->pitch;
|
||||||
|
_framebuffer.bytesPerPixel = 1;
|
||||||
|
|
||||||
|
return &_framebuffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
void OSystem_SDL::unlockScreen() {
|
||||||
|
assert (_transactionMode == kTransactionNone);
|
||||||
|
|
||||||
|
// paranoia check
|
||||||
|
assert(_screenIsLocked);
|
||||||
|
_screenIsLocked = false;
|
||||||
|
|
||||||
// Unlock the screen surface
|
// Unlock the screen surface
|
||||||
SDL_UnlockSurface(_screen);
|
SDL_UnlockSurface(_screen);
|
||||||
|
|
||||||
return true;
|
// Trigger a full screen update
|
||||||
|
_forceFull = true;
|
||||||
|
|
||||||
|
// Finally unlock the graphics mutex
|
||||||
|
unlockMutex(_graphicsMutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OSystem_SDL::addDirtyRect(int x, int y, int w, int h, bool realCoordinates) {
|
void OSystem_SDL::addDirtyRect(int x, int y, int w, int h, bool realCoordinates) {
|
||||||
|
@ -1597,6 +1601,8 @@ void OSystem_SDL::displayMessageOnOSD(const char *msg) {
|
||||||
assert (_transactionMode == kTransactionNone);
|
assert (_transactionMode == kTransactionNone);
|
||||||
assert(msg);
|
assert(msg);
|
||||||
|
|
||||||
|
Common::StackLock lock(_graphicsMutex); // Lock the mutex until this function ends
|
||||||
|
|
||||||
uint i;
|
uint i;
|
||||||
|
|
||||||
// Lock the OSD surface for drawing
|
// Lock the OSD surface for drawing
|
||||||
|
|
|
@ -92,11 +92,8 @@ public:
|
||||||
// The screen will not be updated to reflect the new bitmap
|
// The screen will not be updated to reflect the new bitmap
|
||||||
virtual void copyRectToScreen(const byte *src, int pitch, int x, int y, int w, int h); // overloaded by CE backend (FIXME)
|
virtual void copyRectToScreen(const byte *src, int pitch, int x, int y, int w, int h); // overloaded by CE backend (FIXME)
|
||||||
|
|
||||||
// Copies the screen to a buffer
|
virtual Graphics::Surface *lockScreen();
|
||||||
bool grabRawScreen(Graphics::Surface *surf);
|
virtual void unlockScreen();
|
||||||
|
|
||||||
// Clear the screen
|
|
||||||
void clearScreen();
|
|
||||||
|
|
||||||
// Update the dirty areas of the screen
|
// Update the dirty areas of the screen
|
||||||
void updateScreen();
|
void updateScreen();
|
||||||
|
@ -218,6 +215,8 @@ protected:
|
||||||
|
|
||||||
// unseen game screen
|
// unseen game screen
|
||||||
SDL_Surface *_screen;
|
SDL_Surface *_screen;
|
||||||
|
|
||||||
|
// TODO: We could get rid of the following two vars and just use _screen instead
|
||||||
int _screenWidth, _screenHeight;
|
int _screenWidth, _screenHeight;
|
||||||
|
|
||||||
// temporary screen (for scalers)
|
// temporary screen (for scalers)
|
||||||
|
@ -274,6 +273,9 @@ protected:
|
||||||
int _mode;
|
int _mode;
|
||||||
int _transactionMode;
|
int _transactionMode;
|
||||||
bool _fullscreen;
|
bool _fullscreen;
|
||||||
|
|
||||||
|
bool _screenIsLocked;
|
||||||
|
Graphics::Surface _framebuffer;
|
||||||
|
|
||||||
/** Current video mode flags (see DF_* constants) */
|
/** Current video mode flags (see DF_* constants) */
|
||||||
uint32 _modeFlags;
|
uint32 _modeFlags;
|
||||||
|
|
|
@ -243,6 +243,7 @@ OSystem_SDL::OSystem_SDL()
|
||||||
_savefile(0),
|
_savefile(0),
|
||||||
_mixer(0),
|
_mixer(0),
|
||||||
_timer(0),
|
_timer(0),
|
||||||
|
_screenIsLocked(false),
|
||||||
_graphicsMutex(0), _transactionMode(kTransactionNone) {
|
_graphicsMutex(0), _transactionMode(kTransactionNone) {
|
||||||
|
|
||||||
// allocate palette storage
|
// allocate palette storage
|
||||||
|
|
|
@ -2,9 +2,9 @@
|
||||||
ScummVM - ScummVM ported to EPOC/SymbianOS
|
ScummVM - ScummVM ported to EPOC/SymbianOS
|
||||||
|
|
||||||
Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson
|
Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson
|
||||||
Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson
|
Copyright (C) 2007 Lars 'AnotherGuest' Persson
|
||||||
Copyright (C) 2005 Jurgen 'SumthinWicked' Braam
|
Copyright (C) 2007 Jurgen 'SumthinWicked' Braam
|
||||||
Copyright (C) 2005 ScummVM Team
|
Copyright (C) 2007 ScummVM Team
|
||||||
|
|
||||||
$Id$
|
$Id$
|
||||||
|
|
||||||
|
@ -13,19 +13,35 @@ About ScummVM
|
||||||
--------------
|
--------------
|
||||||
The original ports (uptil 0.7.1) were made by Andreas Karlsson and Lars Persson.
|
The original ports (uptil 0.7.1) were made by Andreas Karlsson and Lars Persson.
|
||||||
The main transition to 0.8.0CVS and all relevant changes were done by Jurgen Braam.
|
The main transition to 0.8.0CVS and all relevant changes were done by Jurgen Braam.
|
||||||
Jurgen and Lars are currently working together to finalize the transfer to CVS.
|
Jurgen and Lars have successfully transfered all needed changes into CVS, with additional helpful tools for Symbian OS
|
||||||
|
|
||||||
|
Release version: 0.10.0
|
||||||
|
* This version is only supported on Symbian OS 9 devices due to compiler constraints for older devices. (That means UIQ3 and S60V3 devices)
|
||||||
|
* Updated to SDL version 1.2.11 (previous version used was 1.2.8)
|
||||||
|
* Information about S60 devices can be found here http://wiki.scummvm.org/index.php/SymbianOS_S60
|
||||||
|
* Information about UIQ devices can be found here http://wiki.scummvm.org/index.php/SymbianOS_UIQ
|
||||||
|
* Best source of general information is the ScummVM forum, http://forums.scummvm.org
|
||||||
|
* SVN builds (not frequently updated) can be found at http://anotherguest.k0.se
|
||||||
|
|
||||||
Nescessary components
|
|
||||||
---------------------
|
Games supported
|
||||||
|
---------------
|
||||||
|
The Symbian port of ScumVM supports all but Sword1 & 2 games. Some games might not run properly due to screenresolution or memory constraints.
|
||||||
|
|
||||||
|
|
||||||
|
Building ScummVM
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
Nescessary components
|
||||||
|
---------------------
|
||||||
Building ScummVM yourself using the UIQ 2.1/Nokia S60 SDK/Nokia S80 SDK/Nokia S90 SDK framework is not an easy task!
|
Building ScummVM yourself using the UIQ 2.1/Nokia S60 SDK/Nokia S80 SDK/Nokia S90 SDK framework is not an easy task!
|
||||||
Lets just say the framework needs quite some time to set up and takes a while
|
Lets just say the framework needs quite some time to set up and takes a while
|
||||||
to get used to. If you choose to continue you will need the following items:
|
to get used to. If you choose to continue you will need the following items:
|
||||||
|
|
||||||
- UIQ 2.1 SDK (To build for UIQ devices);
|
- UIQ 2.1 SDK (To build for UIQ2 devices);
|
||||||
http://www.symbian.com/developer/sdks_uiq.asp
|
http://www.symbian.com/developer/sdks_uiq.asp
|
||||||
|
|
||||||
- Nokia S60 1st, 2nd edition (3rd edition has not been tested) SDK (To build for S60 devices)
|
- Nokia S60 1st, 2nd edition,3rd edition SDK (To build for S60 devices)
|
||||||
|
|
||||||
- Nokia S80 SDK (To build for S80 devices)
|
- Nokia S80 SDK (To build for S80 devices)
|
||||||
|
|
||||||
|
@ -58,8 +74,8 @@ Nescessary components
|
||||||
http://libmpeg2.sourceforge.net/
|
http://libmpeg2.sourceforge.net/
|
||||||
|
|
||||||
|
|
||||||
Building ScummVM
|
Compiling ScummVM
|
||||||
-----------------
|
-----------------
|
||||||
ECompXL: this is a tool that will compress your executable with GZIP and glue
|
ECompXL: this is a tool that will compress your executable with GZIP and glue
|
||||||
it to a predefined loader app. The app will uncompress your application at
|
it to a predefined loader app. The app will uncompress your application at
|
||||||
runtime and run it without you even knowing it. A really interesting byproduct
|
runtime and run it without you even knowing it. A really interesting byproduct
|
||||||
|
|
|
@ -39,6 +39,20 @@
|
||||||
"\epoc32\release\armi\urel\ScummVM.aif"-"!:\system\apps\ScummVM\ScummVM.aif"
|
"\epoc32\release\armi\urel\ScummVM.aif"-"!:\system\apps\ScummVM\ScummVM.aif"
|
||||||
"\epoc32\release\armi\urel\ScummVM.rsc"-"!:\system\apps\ScummVM\ScummVM.rsc"
|
"\epoc32\release\armi\urel\ScummVM.rsc"-"!:\system\apps\ScummVM\ScummVM.rsc"
|
||||||
|
|
||||||
|
"..\..\..\..\dists\pred.dic"-"c:\system\apps\scummvm\pred.dic"
|
||||||
|
|
||||||
|
; Scummvm Documentation
|
||||||
|
"..\..\..\..\COPYRIGHT"-"!:\system\apps\scummvm\COPYRIGHT", FT, TC
|
||||||
|
"..\..\..\..\COPYING"-"!:\system\apps\scummvm\COPYING", FT, TC
|
||||||
|
"..\README"-"!:\system\apps\scummvm\SYMBIAN_README", FT, TC
|
||||||
|
"..\..\..\..\AUTHORS"-"!:\system\apps\scummvm\AUTHORS"
|
||||||
|
"..\..\..\..\README"-"!:\system\apps\scummvm\README"
|
||||||
|
"..\..\..\..\NEWS"-"!:\system\apps\scummvm\NEWS"
|
||||||
|
|
||||||
|
; Common datafiles needed for some games
|
||||||
|
"..\kyra.dat"-"!:\system\apps\scummvm\kyra.dat"
|
||||||
|
"..\sky.cpt"-"!:\system\apps\scummvm\sky.cpt"
|
||||||
|
|
||||||
; Config/log files: 'empty' will automagically be removed on uninstall
|
; Config/log files: 'empty' will automagically be removed on uninstall
|
||||||
""-"!:\system\apps\ScummVM\scummvm.ini",FILENULL
|
""-"!:\system\apps\ScummVM\scummvm.ini",FILENULL
|
||||||
""-"!:\system\apps\ScummVM\scummvm.stdout.txt",FILENULL
|
""-"!:\system\apps\ScummVM\scummvm.stdout.txt",FILENULL
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
;&EN
|
;&EN
|
||||||
|
|
||||||
; UID is the app's UID
|
; UID is the app's UID
|
||||||
#{"ScummVM S60v2"},(0x101f9b57),0,80,3
|
#{"ScummVM S60v2"},(0x101f9b57),0,100,0
|
||||||
|
|
||||||
; Platform type
|
; Platform type
|
||||||
(0x101F6F88), 0, 0, 0, {"Series60ProductID"}
|
(0x101F6F88), 0, 0, 0, {"Series60ProductID"}
|
||||||
|
@ -16,6 +16,19 @@
|
||||||
"\epoc32\release\armi\urel\ScummVM.exe"-"!:\system\apps\ScummVM\ScummVM.exe"
|
"\epoc32\release\armi\urel\ScummVM.exe"-"!:\system\apps\ScummVM\ScummVM.exe"
|
||||||
"\epoc32\data\z\system\apps\ScummVM\ScummVM.aif"-"!:\system\apps\ScummVM\ScummVM.aif"
|
"\epoc32\data\z\system\apps\ScummVM\ScummVM.aif"-"!:\system\apps\ScummVM\ScummVM.aif"
|
||||||
"\epoc32\data\z\system\apps\ScummVM\ScummVM.rsc"-"!:\system\apps\ScummVM\ScummVM.rsc"
|
"\epoc32\data\z\system\apps\ScummVM\ScummVM.rsc"-"!:\system\apps\ScummVM\ScummVM.rsc"
|
||||||
|
"..\..\..\..\dists\pred.dic"-"c:\system\apps\scummvm\pred.dic"
|
||||||
|
|
||||||
|
; Scummvm Documentation
|
||||||
|
"..\..\..\..\COPYRIGHT"-"!:\system\apps\scummvm\COPYRIGHT", FT, TC
|
||||||
|
"..\..\..\..\COPYING"-"!:\system\apps\scummvm\COPYING", FT, TC
|
||||||
|
"..\README"-"!:\system\apps\scummvm\SYMBIAN_README", FT, TC
|
||||||
|
"..\..\..\..\AUTHORS"-"!:\system\apps\scummvm\AUTHORS"
|
||||||
|
"..\..\..\..\README"-"!:\system\apps\scummvm\README"
|
||||||
|
"..\..\..\..\NEWS"-"!:\system\apps\scummvm\NEWS"
|
||||||
|
|
||||||
|
; Common datafiles needed for some games
|
||||||
|
"..\kyra.dat"-"!:\system\apps\scummvm\kyra.dat"
|
||||||
|
"..\sky.cpt"-"!:\system\apps\scummvm\sky.cpt"
|
||||||
|
|
||||||
; Config/log files: 'empty' will automagically be removed on uninstall
|
; Config/log files: 'empty' will automagically be removed on uninstall
|
||||||
""-"!:\system\apps\ScummVM\scummvm.ini",FILENULL
|
""-"!:\system\apps\ScummVM\scummvm.ini",FILENULL
|
||||||
|
|
|
@ -62,12 +62,12 @@ SOURCE c24 ScummxLarge.bmp
|
||||||
SOURCE 8 ScummxLargeMask.bmp
|
SOURCE 8 ScummxLargeMask.bmp
|
||||||
END
|
END
|
||||||
|
|
||||||
EPOCSTACKSIZE 0x0000F000
|
EPOCSTACKSIZE 80000
|
||||||
EPOCHEAPSIZE 2048000 32000000
|
EPOCHEAPSIZE 2048000 32000000
|
||||||
ALWAYS_BUILD_AS_ARM
|
ALWAYS_BUILD_AS_ARM
|
||||||
MACRO S60
|
MACRO S60
|
||||||
MACRO S60V3
|
MACRO S60V3
|
||||||
MACRO EPOC_AS_APP
|
|
||||||
//START_AUTO_MACROS_SLAVE//
|
//START_AUTO_MACROS_SLAVE//
|
||||||
|
|
||||||
// empty base file, will be updated by Perl build scripts
|
// empty base file, will be updated by Perl build scripts
|
||||||
|
|
|
@ -48,6 +48,20 @@
|
||||||
"\epoc32\data\Z\resource\APPS\scummvm.MIF"- "!:\resource\apps\scummvm.MIF"
|
"\epoc32\data\Z\resource\APPS\scummvm.MIF"- "!:\resource\apps\scummvm.MIF"
|
||||||
"\epoc32\data\z\private\10003a3f\apps\scummvm_reg.rsc"-"!:\private\10003a3f\import\apps\scummvm_reg.rsc"
|
"\epoc32\data\z\private\10003a3f\apps\scummvm_reg.rsc"-"!:\private\10003a3f\import\apps\scummvm_reg.rsc"
|
||||||
|
|
||||||
|
"..\..\..\..\dists\pred.dic"-"c:\data\scummvm\pred.dic"
|
||||||
|
|
||||||
|
; Scummvm Documentation
|
||||||
|
"..\..\..\..\COPYRIGHT"-"!:\resource\apps\scummvm\COPYRIGHT", FT, TC
|
||||||
|
"..\..\..\..\COPYING"-"!:\resource\apps\scummvm\COPYING", FT, TC
|
||||||
|
"..\README"-"!:\resource\apps\scummvm\SYMBIAN_README", FT, TC
|
||||||
|
"..\..\..\..\AUTHORS"-"!:\resource\apps\scummvm\AUTHORS"
|
||||||
|
"..\..\..\..\README"-"!:\resource\apps\scummvm\README"
|
||||||
|
"..\..\..\..\NEWS"-"!:\resource\apps\scummvm\NEWS"
|
||||||
|
|
||||||
|
; Common datafiles needed for some games
|
||||||
|
"..\kyra.dat"-"c:\shared\scummvm\kyra.dat"
|
||||||
|
"..\sky.cpt"-"c:\shared\scummvm\sky.cpt"
|
||||||
|
|
||||||
; Config/log files: 'empty' will automagically be removed on uninstall
|
; Config/log files: 'empty' will automagically be removed on uninstall
|
||||||
""-"c:\data\scummvm\scummvm.ini",FILENULL
|
""-"c:\data\scummvm\scummvm.ini",FILENULL
|
||||||
""-"c:\data\scummvm\scummvm.stdout.txt",FILENULL
|
""-"c:\data\scummvm\scummvm.stdout.txt",FILENULL
|
||||||
|
|
|
@ -38,6 +38,19 @@
|
||||||
"\epoc32\release\armi\urel\ScummVM.exe"-"!:\system\apps\ScummVM\ScummVM.exe"
|
"\epoc32\release\armi\urel\ScummVM.exe"-"!:\system\apps\ScummVM\ScummVM.exe"
|
||||||
"\epoc32\data\z\system\apps\ScummVM\ScummVM.aif"-"!:\system\apps\ScummVM\ScummVM.aif"
|
"\epoc32\data\z\system\apps\ScummVM\ScummVM.aif"-"!:\system\apps\ScummVM\ScummVM.aif"
|
||||||
"\epoc32\data\z\system\apps\ScummVM\ScummVM.rsc"-"!:\system\apps\ScummVM\ScummVM.rsc"
|
"\epoc32\data\z\system\apps\ScummVM\ScummVM.rsc"-"!:\system\apps\ScummVM\ScummVM.rsc"
|
||||||
|
"..\..\..\..\dists\pred.dic"-"c:\system\apps\scummvm\pred.dic"
|
||||||
|
|
||||||
|
; Scummvm Documentation
|
||||||
|
"..\..\..\..\COPYRIGHT"-"!:\system\apps\scummvm\COPYRIGHT", FT, TC
|
||||||
|
"..\..\..\..\COPYING"-"!:\system\apps\scummvm\COPYING", FT, TC
|
||||||
|
"..\README"-"!:\system\apps\scummvm\SYMBIAN_README", FT, TC
|
||||||
|
"..\..\..\..\AUTHORS"-"!:\system\apps\scummvm\AUTHORS"
|
||||||
|
"..\..\..\..\README"-"!:\system\apps\scummvm\README"
|
||||||
|
"..\..\..\..\NEWS"-"!:\system\apps\scummvm\NEWS"
|
||||||
|
|
||||||
|
; Common datafiles needed for some games
|
||||||
|
"..\kyra.dat"-"!:\system\apps\scummvm\kyra.dat"
|
||||||
|
"..\sky.cpt"-"!:\system\apps\scummvm\sky.cpt"
|
||||||
|
|
||||||
; Config/log files: 'empty' will automagically be removed on uninstall
|
; Config/log files: 'empty' will automagically be removed on uninstall
|
||||||
""-"!:\system\apps\ScummVM\scummvm.ini",FILENULL
|
""-"!:\system\apps\ScummVM\scummvm.ini",FILENULL
|
||||||
|
|
|
@ -38,6 +38,19 @@
|
||||||
"\epoc32\release\armi\urel\ScummVM.exe"-"!:\system\apps\ScummVM\ScummVM.exe"
|
"\epoc32\release\armi\urel\ScummVM.exe"-"!:\system\apps\ScummVM\ScummVM.exe"
|
||||||
"\epoc32\data\z\system\apps\ScummVM\ScummVM.aif"-"!:\system\apps\ScummVM\ScummVM.aif"
|
"\epoc32\data\z\system\apps\ScummVM\ScummVM.aif"-"!:\system\apps\ScummVM\ScummVM.aif"
|
||||||
"\epoc32\data\z\system\apps\ScummVM\ScummVM.rsc"-"!:\system\apps\ScummVM\ScummVM.rsc"
|
"\epoc32\data\z\system\apps\ScummVM\ScummVM.rsc"-"!:\system\apps\ScummVM\ScummVM.rsc"
|
||||||
|
"..\..\..\..\dists\pred.dic"-"c:\system\apps\scummvm\pred.dic"
|
||||||
|
|
||||||
|
; Scummvm Documentation
|
||||||
|
"..\..\..\..\COPYRIGHT"-"!:\system\apps\scummvm\COPYRIGHT", FT, TC
|
||||||
|
"..\..\..\..\COPYING"-"!:\system\apps\scummvm\COPYING", FT, TC
|
||||||
|
"..\README"-"!:\system\apps\scummvm\SYMBIAN_README", FT, TC
|
||||||
|
"..\..\..\..\AUTHORS"-"!:\system\apps\scummvm\AUTHORS"
|
||||||
|
"..\..\..\..\README"-"!:\system\apps\scummvm\README"
|
||||||
|
"..\..\..\..\NEWS"-"!:\system\apps\scummvm\NEWS"
|
||||||
|
|
||||||
|
; Common datafiles needed for some games
|
||||||
|
"..\kyra.dat"-"!:\system\apps\scummvm\kyra.dat"
|
||||||
|
"..\sky.cpt"-"!:\system\apps\scummvm\sky.cpt"
|
||||||
|
|
||||||
; Config/log files: 'empty' will automagically be removed on uninstall
|
; Config/log files: 'empty' will automagically be removed on uninstall
|
||||||
""-"!:\system\apps\ScummVM\scummvm.ini",FILENULL
|
""-"!:\system\apps\ScummVM\scummvm.ini",FILENULL
|
||||||
|
|
|
@ -39,7 +39,6 @@ AIF ScummVm.Aif ..\res\ ScummVmAif.rss c16 ScummL.bmp ScummLM.bmp ScummS.bmp
|
||||||
UID 0x100039ce 0x101f9b57
|
UID 0x100039ce 0x101f9b57
|
||||||
|
|
||||||
MACRO UIQ
|
MACRO UIQ
|
||||||
MACRO EPOC_AS_APP
|
|
||||||
|
|
||||||
//START_AUTO_MACROS_SLAVE//
|
//START_AUTO_MACROS_SLAVE//
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,19 @@
|
||||||
"\epoc32\release\armi\urel\ScummVM.app"-"!:\system\apps\ScummVM\ScummVM.app"
|
"\epoc32\release\armi\urel\ScummVM.app"-"!:\system\apps\ScummVM\ScummVM.app"
|
||||||
"\epoc32\data\z\system\apps\ScummVM\ScummVM.aif"-"!:\system\apps\ScummVM\ScummVM.aif"
|
"\epoc32\data\z\system\apps\ScummVM\ScummVM.aif"-"!:\system\apps\ScummVM\ScummVM.aif"
|
||||||
"\epoc32\data\z\system\apps\ScummVM\ScummVM.rsc"-"!:\system\apps\ScummVM\ScummVM.rsc"
|
"\epoc32\data\z\system\apps\ScummVM\ScummVM.rsc"-"!:\system\apps\ScummVM\ScummVM.rsc"
|
||||||
|
"..\..\..\..\dists\pred.dic"-"c:\system\apps\scummvm\pred.dic"
|
||||||
|
|
||||||
|
; Scummvm Documentation
|
||||||
|
"..\..\..\..\COPYRIGHT"-"!:\system\apps\scummvm\COPYRIGHT", FT, TC
|
||||||
|
"..\..\..\..\COPYING"-"!:\system\apps\scummvm\COPYING", FT, TC
|
||||||
|
"..\README"-"!:\system\apps\scummvm\SYMBIAN_README", FT, TC
|
||||||
|
"..\..\..\..\AUTHORS"-"!:\system\apps\scummvm\AUTHORS"
|
||||||
|
"..\..\..\..\README"-"!:\system\apps\scummvm\README"
|
||||||
|
"..\..\..\..\NEWS"-"!:\system\apps\scummvm\NEWS"
|
||||||
|
|
||||||
|
; Common datafiles needed for some games
|
||||||
|
"..\kyra.dat"-"!:\system\apps\scummvm\kyra.dat"
|
||||||
|
"..\sky.cpt"-"!:\system\apps\scummvm\sky.cpt"
|
||||||
|
|
||||||
; Config/log files: 'empty' will automagically be removed on uninstall
|
; Config/log files: 'empty' will automagically be removed on uninstall
|
||||||
""-"!:\system\apps\ScummVM\scummvm.ini",FILENULL
|
""-"!:\system\apps\ScummVM\scummvm.ini",FILENULL
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
;&EN
|
;&EN
|
||||||
|
|
||||||
; UID is the app's UID
|
; UID is the app's UID
|
||||||
#{"ScummVM SE"},(0x101f9b57),0,80,3
|
#{"ScummVM SE"},(0x101f9b57),0,100,0
|
||||||
|
|
||||||
; Platform type
|
; Platform type
|
||||||
(0x101F617B), 2, 0, 0, {"UIQ20ProductID"}
|
(0x101F617B), 2, 0, 0, {"UIQ20ProductID"}
|
||||||
|
@ -22,6 +22,10 @@
|
||||||
""-"!:\system\apps\ScummVM\scummvm.stderr.txt",FILENULL
|
""-"!:\system\apps\ScummVM\scummvm.stderr.txt",FILENULL
|
||||||
""-"!:\system\apps\ScummVM\sdl.ini",FILENULL
|
""-"!:\system\apps\ScummVM\sdl.ini",FILENULL
|
||||||
|
|
||||||
|
; Common datafiles needed for some games
|
||||||
|
"..\kyra.dat"-"!:\system\apps\scummvm\kyra.dat"
|
||||||
|
"..\sky.cpt"-"!:\system\apps\scummvm\sky.cpt"
|
||||||
|
|
||||||
; This install layout will let you upgrade to newer versions wihout loss of scummvm.ini.
|
; This install layout will let you upgrade to newer versions wihout loss of scummvm.ini.
|
||||||
; It will remove the config file, std***.txt files & dirs on uninstall.
|
; It will remove the config file, std***.txt files & dirs on uninstall.
|
||||||
|
|
||||||
|
|
|
@ -46,7 +46,7 @@ TARGETPATH \Resource\Apps
|
||||||
LANG SC
|
LANG SC
|
||||||
END
|
END
|
||||||
|
|
||||||
EPOCSTACKSIZE 0x0000FFFF
|
EPOCSTACKSIZE 80000
|
||||||
EPOCHEAPSIZE 3000000 32000000
|
EPOCHEAPSIZE 3000000 32000000
|
||||||
|
|
||||||
START BITMAP ScummVM.mbm
|
START BITMAP ScummVM.mbm
|
||||||
|
@ -66,7 +66,7 @@ UID 0x100039ce 0xA0000657
|
||||||
|
|
||||||
MACRO UIQ
|
MACRO UIQ
|
||||||
MACRO UIQ3
|
MACRO UIQ3
|
||||||
MACRO EPOC_AS_APP
|
|
||||||
ALWAYS_BUILD_AS_ARM
|
ALWAYS_BUILD_AS_ARM
|
||||||
|
|
||||||
//START_AUTO_MACROS_SLAVE//
|
//START_AUTO_MACROS_SLAVE//
|
||||||
|
|
|
@ -46,6 +46,19 @@
|
||||||
"\epoc32\Data\Z\resource\apps\scummvm_loc.rsc"- "!:\resource\apps\scummvm_loc.rsc"
|
"\epoc32\Data\Z\resource\apps\scummvm_loc.rsc"- "!:\resource\apps\scummvm_loc.rsc"
|
||||||
"\epoc32\data\Z\resource\APPS\scummvm.MBM"- "!:\resource\apps\scummvm.MBM"
|
"\epoc32\data\Z\resource\APPS\scummvm.MBM"- "!:\resource\apps\scummvm.MBM"
|
||||||
"\epoc32\data\z\private\10003a3f\apps\scummvm_reg.rsc"-"!:\private\10003a3f\import\apps\scummvm_reg.rsc"
|
"\epoc32\data\z\private\10003a3f\apps\scummvm_reg.rsc"-"!:\private\10003a3f\import\apps\scummvm_reg.rsc"
|
||||||
|
"..\..\..\..\dists\pred.dic"-"c:\shared\scummvm\pred.dic"
|
||||||
|
|
||||||
|
; Scummvm Documentation
|
||||||
|
"..\..\..\..\COPYRIGHT"-"!:\resource\apps\scummvm\COPYRIGHT", FT, TC
|
||||||
|
"..\..\..\..\COPYING"-"!:\resource\apps\scummvm\COPYING", FT, TC
|
||||||
|
"..\README"-"!:\system\apps\scummvm\SYMBIAN_README", FT, TC
|
||||||
|
"..\..\..\..\AUTHORS"-"!:\resource\apps\scummvm\AUTHORS"
|
||||||
|
"..\..\..\..\README"-"!:\resource\apps\scummvm\README"
|
||||||
|
"..\..\..\..\NEWS"-"!:\resource\apps\scummvm\NEWS"
|
||||||
|
|
||||||
|
; Common datafiles needed for some games
|
||||||
|
"..\kyra.dat"-"c:\shared\scummvm\kyra.dat"
|
||||||
|
"..\sky.cpt"-"c:\shared\scummvm\sky.cpt"
|
||||||
|
|
||||||
; Config/log files: 'empty' will automagically be removed on uninstall
|
; Config/log files: 'empty' will automagically be removed on uninstall
|
||||||
""-"c:\shared\scummvm\scummvm.ini",FILENULL
|
""-"c:\shared\scummvm\scummvm.ini",FILENULL
|
||||||
|
|
|
@ -30,6 +30,7 @@ TARGET scummvm_agi.lib
|
||||||
TARGETTYPE lib
|
TARGETTYPE lib
|
||||||
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
|
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
|
||||||
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
|
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
|
||||||
|
ALWAYS_BUILD_AS_ARM
|
||||||
|
|
||||||
//START_AUTO_MACROS_SLAVE//
|
//START_AUTO_MACROS_SLAVE//
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ TARGET scummvm_agos.lib
|
||||||
TARGETTYPE lib
|
TARGETTYPE lib
|
||||||
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
|
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
|
||||||
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
|
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
|
||||||
|
ALWAYS_BUILD_AS_ARM
|
||||||
|
|
||||||
//START_AUTO_MACROS_SLAVE//
|
//START_AUTO_MACROS_SLAVE//
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ TARGET scummvm_base.lib
|
||||||
TARGETTYPE lib
|
TARGETTYPE lib
|
||||||
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
|
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
|
||||||
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
|
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
|
||||||
|
ALWAYS_BUILD_AS_ARM
|
||||||
|
|
||||||
// Note: the LIB:*.lib statements are used by AdaptAllMMPs.pl, so don't remove them!
|
// Note: the LIB:*.lib statements are used by AdaptAllMMPs.pl, so don't remove them!
|
||||||
//START_AUTO_MACROS_MASTER//
|
//START_AUTO_MACROS_MASTER//
|
||||||
|
|
|
@ -30,6 +30,7 @@ TARGET scummvm_CINE.lib
|
||||||
TARGETTYPE lib
|
TARGETTYPE lib
|
||||||
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
|
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
|
||||||
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
|
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
|
||||||
|
ALWAYS_BUILD_AS_ARM
|
||||||
|
|
||||||
//START_AUTO_MACROS_SLAVE//
|
//START_AUTO_MACROS_SLAVE//
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ TARGET scummvm_cruise.lib
|
||||||
TARGETTYPE lib
|
TARGETTYPE lib
|
||||||
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
|
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
|
||||||
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
|
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
|
||||||
|
ALWAYS_BUILD_AS_ARM
|
||||||
|
|
||||||
//START_AUTO_MACROS_SLAVE//
|
//START_AUTO_MACROS_SLAVE//
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ TARGET scummvm_gob.lib
|
||||||
TARGETTYPE lib
|
TARGETTYPE lib
|
||||||
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
|
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
|
||||||
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
|
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
|
||||||
|
ALWAYS_BUILD_AS_ARM
|
||||||
|
|
||||||
//START_AUTO_MACROS_SLAVE//
|
//START_AUTO_MACROS_SLAVE//
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ TARGET scummvm_kyra.lib
|
||||||
TARGETTYPE lib
|
TARGETTYPE lib
|
||||||
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
|
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
|
||||||
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
|
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
|
||||||
|
ALWAYS_BUILD_AS_ARM
|
||||||
|
|
||||||
//START_AUTO_MACROS_SLAVE//
|
//START_AUTO_MACROS_SLAVE//
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ TARGET scummvm_lure.lib
|
||||||
TARGETTYPE lib
|
TARGETTYPE lib
|
||||||
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
|
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
|
||||||
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
|
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
|
||||||
|
ALWAYS_BUILD_AS_ARM
|
||||||
|
|
||||||
//START_AUTO_MACROS_SLAVE//
|
//START_AUTO_MACROS_SLAVE//
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ TARGET scummvm_parallaction.lib
|
||||||
TARGETTYPE lib
|
TARGETTYPE lib
|
||||||
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
|
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
|
||||||
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
|
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
|
||||||
|
ALWAYS_BUILD_AS_ARM
|
||||||
|
|
||||||
//START_AUTO_MACROS_SLAVE//
|
//START_AUTO_MACROS_SLAVE//
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ TARGET scummvm_queen.lib
|
||||||
TARGETTYPE lib
|
TARGETTYPE lib
|
||||||
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
|
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
|
||||||
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
|
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
|
||||||
|
ALWAYS_BUILD_AS_ARM
|
||||||
|
|
||||||
//START_AUTO_MACROS_SLAVE//
|
//START_AUTO_MACROS_SLAVE//
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ TARGET scummvm_saga.lib
|
||||||
TARGETTYPE lib
|
TARGETTYPE lib
|
||||||
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
|
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
|
||||||
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
|
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
|
||||||
|
ALWAYS_BUILD_AS_ARM
|
||||||
|
|
||||||
//START_AUTO_MACROS_SLAVE//
|
//START_AUTO_MACROS_SLAVE//
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ TARGET scummvm_scumm.lib
|
||||||
TARGETTYPE lib
|
TARGETTYPE lib
|
||||||
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
|
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
|
||||||
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
|
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
|
||||||
|
ALWAYS_BUILD_AS_ARM
|
||||||
|
|
||||||
//START_AUTO_MACROS_SLAVE//
|
//START_AUTO_MACROS_SLAVE//
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ TARGET scummvm_sky.lib
|
||||||
TARGETTYPE lib
|
TARGETTYPE lib
|
||||||
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
|
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
|
||||||
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
|
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
|
||||||
|
ALWAYS_BUILD_AS_ARM
|
||||||
|
|
||||||
//START_AUTO_MACROS_SLAVE//
|
//START_AUTO_MACROS_SLAVE//
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ TARGET scummvm_sword1.lib
|
||||||
TARGETTYPE lib
|
TARGETTYPE lib
|
||||||
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
|
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
|
||||||
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
|
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
|
||||||
|
ALWAYS_BUILD_AS_ARM
|
||||||
|
|
||||||
//START_AUTO_MACROS_SLAVE//
|
//START_AUTO_MACROS_SLAVE//
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ TARGET scummvm_sword2.lib
|
||||||
TARGETTYPE lib
|
TARGETTYPE lib
|
||||||
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
|
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
|
||||||
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
|
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
|
||||||
|
ALWAYS_BUILD_AS_ARM
|
||||||
|
|
||||||
//START_AUTO_MACROS_SLAVE//
|
//START_AUTO_MACROS_SLAVE//
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ TARGET scummvm_touche.lib
|
||||||
TARGETTYPE lib
|
TARGETTYPE lib
|
||||||
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
|
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
|
||||||
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
|
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
|
||||||
|
ALWAYS_BUILD_AS_ARM
|
||||||
|
|
||||||
//START_AUTO_MACROS_SLAVE//
|
//START_AUTO_MACROS_SLAVE//
|
||||||
|
|
||||||
|
|
|
@ -47,7 +47,7 @@ const Common::String actionNames[] = {
|
||||||
"Save",
|
"Save",
|
||||||
"Skip",
|
"Skip",
|
||||||
"Zone",
|
"Zone",
|
||||||
"FT Cheat",
|
"Multi Function",
|
||||||
"Swap character",
|
"Swap character",
|
||||||
"Skip text",
|
"Skip text",
|
||||||
"Pause",
|
"Pause",
|
||||||
|
@ -122,7 +122,7 @@ void SymbianActions::initInstanceMain(OSystem *mainSystem) {
|
||||||
|
|
||||||
// Skip
|
// Skip
|
||||||
_action_enabled[ACTION_SKIP] = true;
|
_action_enabled[ACTION_SKIP] = true;
|
||||||
_key_action[ACTION_SKIP].setAscii(SDLK_ESCAPE);
|
_key_action[ACTION_SKIP].setKey(SDLK_ESCAPE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianActions::initInstanceGame() {
|
void SymbianActions::initInstanceGame() {
|
||||||
|
@ -138,7 +138,8 @@ void SymbianActions::initInstanceGame() {
|
||||||
bool is_cine = (gameid == "cine");
|
bool is_cine = (gameid == "cine");
|
||||||
bool is_touche = (gameid == "touche");
|
bool is_touche = (gameid == "touche");
|
||||||
bool is_agi = (gameid == "agi");
|
bool is_agi = (gameid == "agi");
|
||||||
|
bool is_parallaction = (gameid == "parallaction");
|
||||||
|
|
||||||
Actions::initInstanceGame();
|
Actions::initInstanceGame();
|
||||||
|
|
||||||
// Initialize keys for different actions
|
// Initialize keys for different actions
|
||||||
|
@ -149,51 +150,58 @@ void SymbianActions::initInstanceGame() {
|
||||||
_action_enabled[ACTION_SAVE] = true;
|
_action_enabled[ACTION_SAVE] = true;
|
||||||
|
|
||||||
if (is_queen) {
|
if (is_queen) {
|
||||||
_key_action[ACTION_SAVE].setAscii(SDLK_F1); // F1 key for FOTAQ
|
_key_action[ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5); // F1 key for FOTAQ
|
||||||
} else if (is_sky) {
|
} else if (is_sky) {
|
||||||
_key_action[ACTION_SAVE].setAscii(63);
|
_key_action[ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5);
|
||||||
} else if (is_cine) {
|
} else if (is_cine) {
|
||||||
_key_action[ACTION_SAVE].setAscii(SDLK_F10); // F10
|
_key_action[ACTION_SAVE].setKey(Common::ASCII_F10, SDLK_F10); // F10
|
||||||
} else if (is_agi) {
|
} else if (is_agi) {
|
||||||
_key_action[ACTION_SAVE].setAscii(SDLK_ESCAPE);
|
_key_action[ACTION_SAVE].setKey(Common::ASCII_ESCAPE, SDLK_ESCAPE);
|
||||||
|
} else if (is_parallaction) {
|
||||||
|
_key_action[ACTION_SAVE].setKey('s', SDLK_s);
|
||||||
} else {
|
} else {
|
||||||
_key_action[ACTION_SAVE].setAscii(SDLK_F5); // F5 key
|
_key_action[ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5); // F5 key
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Enable fast mode
|
// Enable fast mode
|
||||||
_action_enabled[ACTION_FASTMODE] = true;
|
_action_enabled[ACTION_FASTMODE] = true;
|
||||||
_key_action[ACTION_FASTMODE].setAscii('f');
|
_key_action[ACTION_FASTMODE].setKey('f', SDLK_f, KMOD_CTRL);
|
||||||
_key_action[ACTION_FASTMODE].setFlags(KMOD_CTRL);
|
|
||||||
|
|
||||||
// Swap character
|
// Swap character
|
||||||
_action_enabled[ACTION_SWAPCHAR] = true;
|
_action_enabled[ACTION_SWAPCHAR] = true;
|
||||||
_key_action[ACTION_SWAPCHAR].setAscii('b'); // b
|
_key_action[ACTION_SWAPCHAR].setKey('b'); // b
|
||||||
|
|
||||||
// Zone
|
// Zone
|
||||||
_action_enabled[ACTION_ZONE] = true;
|
_action_enabled[ACTION_ZONE] = true;
|
||||||
|
|
||||||
// FT Cheat
|
// Multi function key
|
||||||
_action_enabled[ACTION_FT_CHEAT] = true;
|
_action_enabled[ACTION_MULTI] = true;
|
||||||
_key_action[ACTION_FT_CHEAT].setAscii(86); // shift-V
|
if (is_agi)
|
||||||
|
_key_action[ACTION_MULTI].setKey(SDLK_PAUSE); // agi: show predictive dialog
|
||||||
|
else if (is_gob)
|
||||||
|
_key_action[ACTION_MULTI].setKey(Common::ASCII_F1, SDLK_F1); // bargon : F1 to start
|
||||||
|
else if (gameid == "atlantis")
|
||||||
|
_key_action[ACTION_MULTI].setKey(0, SDLK_KP0); // fate of atlantis : Ins to sucker-punch
|
||||||
|
else
|
||||||
|
_key_action[ACTION_MULTI].setKey('V', SDLK_v, KMOD_SHIFT); // FT cheat : shift-V
|
||||||
|
|
||||||
// Enable debugger
|
// Enable debugger
|
||||||
_action_enabled[ACTION_DEBUGGER] = true;
|
_action_enabled[ACTION_DEBUGGER] = true;
|
||||||
_key_action[ACTION_DEBUGGER].setAscii('d');
|
_key_action[ACTION_DEBUGGER].setKey('d', SDLK_d, KMOD_CTRL);
|
||||||
_key_action[ACTION_DEBUGGER].setFlags(KMOD_CTRL);
|
|
||||||
|
|
||||||
// Skip text
|
// Skip text
|
||||||
if (!is_cine)
|
if (!is_cine)
|
||||||
_action_enabled[ACTION_SKIP_TEXT] = true;
|
_action_enabled[ACTION_SKIP_TEXT] = true;
|
||||||
|
|
||||||
if (is_queen) {
|
if (is_queen) {
|
||||||
_key_action[ACTION_SKIP_TEXT].setAscii(SDLK_SPACE);
|
_key_action[ACTION_SKIP_TEXT].setKey(SDLK_SPACE);
|
||||||
} else {
|
} else {
|
||||||
_key_action[ACTION_SKIP_TEXT].setAscii(SDLK_PERIOD);
|
_key_action[ACTION_SKIP_TEXT].setKey(SDLK_PERIOD);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pause
|
// Pause
|
||||||
_key_action[ACTION_PAUSE].setAscii(' ');
|
_key_action[ACTION_PAUSE].setKey(' ');
|
||||||
_action_enabled[ACTION_PAUSE] = true;
|
_action_enabled[ACTION_PAUSE] = true;
|
||||||
|
|
||||||
// Quit
|
// Quit
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
|
|
||||||
namespace GUI {
|
namespace GUI {
|
||||||
|
|
||||||
#define ACTION_VERSION 6
|
#define ACTION_VERSION 7
|
||||||
|
|
||||||
enum actionType {
|
enum actionType {
|
||||||
ACTION_UP = 0,
|
ACTION_UP = 0,
|
||||||
|
@ -46,7 +46,7 @@ enum actionType {
|
||||||
ACTION_SAVE,
|
ACTION_SAVE,
|
||||||
ACTION_SKIP,
|
ACTION_SKIP,
|
||||||
ACTION_ZONE,
|
ACTION_ZONE,
|
||||||
ACTION_FT_CHEAT,
|
ACTION_MULTI,
|
||||||
ACTION_SWAPCHAR,
|
ACTION_SWAPCHAR,
|
||||||
ACTION_SKIP_TEXT,
|
ACTION_SKIP_TEXT,
|
||||||
ACTION_PAUSE,
|
ACTION_PAUSE,
|
||||||
|
|
|
@ -88,8 +88,10 @@ void OSystem_SDL_Symbian::setFeatureState(Feature f, bool enable) {
|
||||||
else {
|
else {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
return;
|
case kFeatureDisableKeyFiltering:
|
||||||
|
GUI::Actions::Instance()->beginMapping(enable);
|
||||||
|
break;;
|
||||||
default:
|
default:
|
||||||
OSystem_SDL::setFeatureState(f, enable);
|
OSystem_SDL::setFeatureState(f, enable);
|
||||||
}
|
}
|
||||||
|
@ -104,6 +106,7 @@ OSystem_SDL_Symbian::OSystem_SDL_Symbian() :_channels(0),_stereo_mix_buffer(0) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void OSystem_SDL_Symbian::initBackend() {
|
void OSystem_SDL_Symbian::initBackend() {
|
||||||
|
ConfMan.set("extrapath", Symbian::GetExecutablePath());
|
||||||
ConfMan.setBool("FM_high_quality", false);
|
ConfMan.setBool("FM_high_quality", false);
|
||||||
#if !defined(S60) || defined(S60V3) // S60 has low quality as default
|
#if !defined(S60) || defined(S60V3) // S60 has low quality as default
|
||||||
ConfMan.setBool("FM_medium_quality", true);
|
ConfMan.setBool("FM_medium_quality", true);
|
||||||
|
@ -143,7 +146,7 @@ bool OSystem_SDL_Symbian::setGraphicsMode(const char * /*name*/) {
|
||||||
return OSystem_SDL::setGraphicsMode(getDefaultGraphicsMode());
|
return OSystem_SDL::setGraphicsMode(getDefaultGraphicsMode());
|
||||||
}
|
}
|
||||||
|
|
||||||
void OSystem_SDL_Symbian::quitWithErrorMsg(const char *msg) {
|
void OSystem_SDL_Symbian::quitWithErrorMsg(const char * /*aMsg*/) {
|
||||||
|
|
||||||
CEikonEnv::Static()->AlertWin(_L("quitWithErrorMsg()")) ;
|
CEikonEnv::Static()->AlertWin(_L("quitWithErrorMsg()")) ;
|
||||||
|
|
||||||
|
@ -345,16 +348,21 @@ bool OSystem_SDL_Symbian::remapKey(SDL_Event &ev, Common::Event &event) {
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
case GUI::ACTION_MULTI: {
|
||||||
|
GUI::Key &key = GUI::Actions::Instance()->getKeyAction(loop);
|
||||||
|
// if key code is pause, then change event to interactive or just fall through
|
||||||
|
if(key.keycode() == SDLK_PAUSE) {
|
||||||
|
event.type = Common::EVENT_PREDICTIVE_DIALOG;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
case GUI::ACTION_SAVE:
|
case GUI::ACTION_SAVE:
|
||||||
case GUI::ACTION_SKIP:
|
case GUI::ACTION_SKIP:
|
||||||
case GUI::ACTION_FT_CHEAT:
|
|
||||||
case GUI::ACTION_SKIP_TEXT:
|
case GUI::ACTION_SKIP_TEXT:
|
||||||
case GUI::ACTION_PAUSE:
|
case GUI::ACTION_PAUSE:
|
||||||
case GUI::ACTION_SWAPCHAR:
|
case GUI::ACTION_SWAPCHAR:
|
||||||
case GUI::ACTION_FASTMODE:
|
case GUI::ACTION_FASTMODE:
|
||||||
case GUI::ACTION_DEBUGGER:
|
case GUI::ACTION_DEBUGGER: {
|
||||||
{
|
|
||||||
GUI::Key &key = GUI::Actions::Instance()->getKeyAction(loop);
|
GUI::Key &key = GUI::Actions::Instance()->getKeyAction(loop);
|
||||||
ev.key.keysym.sym = (SDLKey) key.ascii();
|
ev.key.keysym.sym = (SDLKey) key.ascii();
|
||||||
ev.key.keysym.scancode= key.keycode();
|
ev.key.keysym.scancode= key.keycode();
|
||||||
|
@ -426,7 +434,7 @@ struct TSymbianFileEntry {
|
||||||
|
|
||||||
FILE* symbian_fopen(const char* name, const char* mode) {
|
FILE* symbian_fopen(const char* name, const char* mode) {
|
||||||
TSymbianFileEntry* fileEntry = new TSymbianFileEntry;
|
TSymbianFileEntry* fileEntry = new TSymbianFileEntry;
|
||||||
|
|
||||||
if (fileEntry != NULL) {
|
if (fileEntry != NULL) {
|
||||||
TInt modeLen = strlen(mode);
|
TInt modeLen = strlen(mode);
|
||||||
|
|
||||||
|
@ -446,7 +454,9 @@ FILE* symbian_fopen(const char* name, const char* mode) {
|
||||||
if ((modeLen > 1 && mode[1] == '+') || (modeLen > 2 && mode[2] == '+')) {
|
if ((modeLen > 1 && mode[1] == '+') || (modeLen > 2 && mode[2] == '+')) {
|
||||||
fileMode = fileMode| EFileWrite;
|
fileMode = fileMode| EFileWrite;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fileMode = fileMode| EFileShareAny;
|
||||||
|
|
||||||
switch(mode[0]) {
|
switch(mode[0]) {
|
||||||
case 'a':
|
case 'a':
|
||||||
if (fileEntry->iFileHandle.Open(CEikonEnv::Static()->FsSession(), tempFileName, fileMode) != KErrNone) {
|
if (fileEntry->iFileHandle.Open(CEikonEnv::Static()->FsSession(), tempFileName, fileMode) != KErrNone) {
|
||||||
|
@ -471,7 +481,6 @@ FILE* symbian_fopen(const char* name, const char* mode) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (FILE*) fileEntry;
|
return (FILE*) fileEntry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,7 @@ const String pocketActionNames[] = {
|
||||||
"Free look",
|
"Free look",
|
||||||
"Zoom up",
|
"Zoom up",
|
||||||
"Zoom down",
|
"Zoom down",
|
||||||
"FT Cheat",
|
"Multi Function",
|
||||||
"Bind Keys",
|
"Bind Keys",
|
||||||
"Cursor Up",
|
"Cursor Up",
|
||||||
"Cursor Down",
|
"Cursor Down",
|
||||||
|
@ -99,7 +99,7 @@ GUI::Actions()
|
||||||
_action_enabled[POCKET_ACTION_DOWN] = true;
|
_action_enabled[POCKET_ACTION_DOWN] = true;
|
||||||
_action_enabled[POCKET_ACTION_LEFT] = true;
|
_action_enabled[POCKET_ACTION_LEFT] = true;
|
||||||
_action_enabled[POCKET_ACTION_RIGHT] = true;
|
_action_enabled[POCKET_ACTION_RIGHT] = true;
|
||||||
_action_mapping[POCKET_ACTION_LEFTCLICK] = SDLK_RETURN;
|
_action_mapping[POCKET_ACTION_LEFTCLICK] = SDLK_F1;
|
||||||
_action_mapping[POCKET_ACTION_UP] = SDLK_UP;
|
_action_mapping[POCKET_ACTION_UP] = SDLK_UP;
|
||||||
_action_mapping[POCKET_ACTION_DOWN] = SDLK_DOWN;
|
_action_mapping[POCKET_ACTION_DOWN] = SDLK_DOWN;
|
||||||
_action_mapping[POCKET_ACTION_LEFT] = SDLK_LEFT;
|
_action_mapping[POCKET_ACTION_LEFT] = SDLK_LEFT;
|
||||||
|
@ -127,11 +127,12 @@ void CEActionsPocket::initInstanceGame() {
|
||||||
bool is_cine = (gameid == "cine");
|
bool is_cine = (gameid == "cine");
|
||||||
bool is_touche = (gameid == "touche");
|
bool is_touche = (gameid == "touche");
|
||||||
bool is_agi = (gameid == "agi");
|
bool is_agi = (gameid == "agi");
|
||||||
|
bool is_parallaction = (gameid == "parallaction");
|
||||||
|
|
||||||
GUI_Actions::initInstanceGame();
|
GUI_Actions::initInstanceGame();
|
||||||
|
|
||||||
// See if a right click mapping could be needed
|
// See if a right click mapping could be needed
|
||||||
if (is_sword1 || is_sword2 || is_sky || is_queen || is_comi || is_gob || is_samnmax || is_cine || is_touche)
|
if (is_sword1 || is_sword2 || is_sky || is_queen || is_comi || is_gob || is_samnmax || is_cine || is_touche || is_parallaction)
|
||||||
_right_click_needed = true;
|
_right_click_needed = true;
|
||||||
|
|
||||||
// See if a "hide toolbar" mapping could be needed
|
// See if a "hide toolbar" mapping could be needed
|
||||||
|
@ -140,36 +141,39 @@ void CEActionsPocket::initInstanceGame() {
|
||||||
|
|
||||||
// Initialize keys for different actions
|
// Initialize keys for different actions
|
||||||
// Pause
|
// Pause
|
||||||
_key_action[POCKET_ACTION_PAUSE].setAscii(VK_SPACE);
|
_key_action[POCKET_ACTION_PAUSE].setKey(VK_SPACE);
|
||||||
_action_enabled[POCKET_ACTION_PAUSE] = true;
|
_action_enabled[POCKET_ACTION_PAUSE] = true;
|
||||||
// Save
|
// Save
|
||||||
if (is_simon || is_sword2 || is_gob || is_kyra || is_touche)
|
if (is_simon || is_sword2 || is_gob || is_kyra || is_touche)
|
||||||
_action_enabled[POCKET_ACTION_SAVE] = false;
|
_action_enabled[POCKET_ACTION_SAVE] = false;
|
||||||
else if (is_queen) {
|
else if (is_queen) {
|
||||||
_action_enabled[POCKET_ACTION_SAVE] = true;
|
_action_enabled[POCKET_ACTION_SAVE] = true;
|
||||||
_key_action[POCKET_ACTION_SAVE].setAscii(286); // F1 key for FOTAQ
|
_key_action[POCKET_ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5); // F1 key for FOTAQ
|
||||||
} else if (is_sky) {
|
} else if (is_sky) {
|
||||||
_action_enabled[POCKET_ACTION_SAVE] = true;
|
_action_enabled[POCKET_ACTION_SAVE] = true;
|
||||||
_key_action[POCKET_ACTION_SAVE].setAscii(63);
|
_key_action[POCKET_ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5);
|
||||||
} else if (is_cine) {
|
} else if (is_cine) {
|
||||||
_action_enabled[POCKET_ACTION_SAVE] = true;
|
_action_enabled[POCKET_ACTION_SAVE] = true;
|
||||||
_key_action[POCKET_ACTION_SAVE].setAscii(291); // F10
|
_key_action[POCKET_ACTION_SAVE].setKey(Common::ASCII_F10, SDLK_F10); // F10
|
||||||
} else if (is_agi) {
|
} else if (is_agi) {
|
||||||
_action_enabled[POCKET_ACTION_SAVE] = true;
|
_action_enabled[POCKET_ACTION_SAVE] = true;
|
||||||
_key_action[POCKET_ACTION_SAVE].setAscii(SDLK_ESCAPE);
|
_key_action[POCKET_ACTION_SAVE].setKey(Common::ASCII_ESCAPE, SDLK_ESCAPE);
|
||||||
|
} else if (is_parallaction) {
|
||||||
|
_action_enabled[POCKET_ACTION_SAVE] = true;
|
||||||
|
_key_action[POCKET_ACTION_SAVE].setKey('s', SDLK_s);
|
||||||
} else {
|
} else {
|
||||||
_action_enabled[POCKET_ACTION_SAVE] = true;
|
_action_enabled[POCKET_ACTION_SAVE] = true;
|
||||||
_key_action[POCKET_ACTION_SAVE].setAscii(319); // F5 key
|
_key_action[POCKET_ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5); // F5 key
|
||||||
}
|
}
|
||||||
// Quit
|
// Quit
|
||||||
_action_enabled[POCKET_ACTION_QUIT] = true;
|
_action_enabled[POCKET_ACTION_QUIT] = true;
|
||||||
// Skip
|
// Skip
|
||||||
if (!is_cine)
|
if (!is_cine && !is_parallaction)
|
||||||
_action_enabled[POCKET_ACTION_SKIP] = true;
|
_action_enabled[POCKET_ACTION_SKIP] = true;
|
||||||
if (is_simon || is_sky || is_sword2 || is_queen || is_sword1 || is_gob || is_saga || is_kyra || is_touche)
|
if (is_simon || is_sky || is_sword2 || is_queen || is_sword1 || is_gob || is_saga || is_kyra || is_touche)
|
||||||
_key_action[POCKET_ACTION_SKIP].setAscii(VK_ESCAPE);
|
_key_action[POCKET_ACTION_SKIP].setKey(VK_ESCAPE);
|
||||||
else
|
else
|
||||||
_key_action[POCKET_ACTION_SKIP].setAscii(KEY_ALL_SKIP);
|
_key_action[POCKET_ACTION_SKIP].setKey(KEY_ALL_SKIP);
|
||||||
// Hide
|
// Hide
|
||||||
_action_enabled[POCKET_ACTION_HIDE] = true;
|
_action_enabled[POCKET_ACTION_HIDE] = true;
|
||||||
// Keyboard
|
// Keyboard
|
||||||
|
@ -188,9 +192,16 @@ void CEActionsPocket::initInstanceGame() {
|
||||||
_action_enabled[POCKET_ACTION_ZOOM_UP] = true;
|
_action_enabled[POCKET_ACTION_ZOOM_UP] = true;
|
||||||
_action_enabled[POCKET_ACTION_ZOOM_DOWN] = true;
|
_action_enabled[POCKET_ACTION_ZOOM_DOWN] = true;
|
||||||
}
|
}
|
||||||
// FT Cheat
|
// Multi function key
|
||||||
_action_enabled[POCKET_ACTION_FT_CHEAT] = true;
|
_action_enabled[POCKET_ACTION_MULTI] = true;
|
||||||
_key_action[POCKET_ACTION_FT_CHEAT].setAscii(86); // shift-V
|
if (is_agi)
|
||||||
|
_key_action[POCKET_ACTION_MULTI].setKey(SDLK_PAUSE); // agi: show predictive dialog
|
||||||
|
else if (is_gob)
|
||||||
|
_key_action[POCKET_ACTION_MULTI].setKey(Common::ASCII_F1, SDLK_F1); // bargon : F1 to start
|
||||||
|
else if (gameid == "atlantis")
|
||||||
|
_key_action[POCKET_ACTION_MULTI].setKey(0, SDLK_KP0); // fate of atlantis : Ins to sucker-punch
|
||||||
|
else
|
||||||
|
_key_action[POCKET_ACTION_MULTI].setKey('V', SDLK_v, KMOD_SHIFT); // FT cheat : shift-V
|
||||||
// Key bind method
|
// Key bind method
|
||||||
_action_enabled[POCKET_ACTION_BINDKEYS] = true;
|
_action_enabled[POCKET_ACTION_BINDKEYS] = true;
|
||||||
}
|
}
|
||||||
|
@ -213,7 +224,7 @@ bool CEActionsPocket::perform(GUI::ActionType action, bool pushed) {
|
||||||
case POCKET_ACTION_PAUSE:
|
case POCKET_ACTION_PAUSE:
|
||||||
case POCKET_ACTION_SAVE:
|
case POCKET_ACTION_SAVE:
|
||||||
case POCKET_ACTION_SKIP:
|
case POCKET_ACTION_SKIP:
|
||||||
case POCKET_ACTION_FT_CHEAT:
|
case POCKET_ACTION_MULTI:
|
||||||
EventsBuffer::simulateKey(&_key_action[action], false);
|
EventsBuffer::simulateKey(&_key_action[action], false);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
@ -225,7 +236,16 @@ bool CEActionsPocket::perform(GUI::ActionType action, bool pushed) {
|
||||||
case POCKET_ACTION_PAUSE:
|
case POCKET_ACTION_PAUSE:
|
||||||
case POCKET_ACTION_SAVE:
|
case POCKET_ACTION_SAVE:
|
||||||
case POCKET_ACTION_SKIP:
|
case POCKET_ACTION_SKIP:
|
||||||
case POCKET_ACTION_FT_CHEAT:
|
case POCKET_ACTION_MULTI:
|
||||||
|
if (action == POCKET_ACTION_SAVE && ConfMan.get("gameid") == "parallaction") {
|
||||||
|
// FIXME: This is a temporary solution. The engine should handle its own menus.
|
||||||
|
// Note that the user can accomplish this via the virtual keyboard as well, this is just for convenience
|
||||||
|
GUI::MessageDialog alert("Do you want to load or save the game?", "Load", "Save");
|
||||||
|
if (alert.runModal() == GUI::kMessageOK)
|
||||||
|
_key_action[action].setKey(SDLK_l);
|
||||||
|
else
|
||||||
|
_key_action[action].setKey(SDLK_s);
|
||||||
|
}
|
||||||
EventsBuffer::simulateKey(&_key_action[action], true);
|
EventsBuffer::simulateKey(&_key_action[action], true);
|
||||||
return true;
|
return true;
|
||||||
case POCKET_ACTION_KEYBOARD:
|
case POCKET_ACTION_KEYBOARD:
|
||||||
|
|
|
@ -48,7 +48,7 @@ enum pocketActionType {
|
||||||
POCKET_ACTION_FREELOOK,
|
POCKET_ACTION_FREELOOK,
|
||||||
POCKET_ACTION_ZOOM_UP,
|
POCKET_ACTION_ZOOM_UP,
|
||||||
POCKET_ACTION_ZOOM_DOWN,
|
POCKET_ACTION_ZOOM_DOWN,
|
||||||
POCKET_ACTION_FT_CHEAT,
|
POCKET_ACTION_MULTI,
|
||||||
POCKET_ACTION_BINDKEYS,
|
POCKET_ACTION_BINDKEYS,
|
||||||
POCKET_ACTION_UP,
|
POCKET_ACTION_UP,
|
||||||
POCKET_ACTION_DOWN,
|
POCKET_ACTION_DOWN,
|
||||||
|
|
|
@ -43,7 +43,7 @@ const String smartphoneActionNames[] = {
|
||||||
"Save",
|
"Save",
|
||||||
"Skip",
|
"Skip",
|
||||||
"Zone",
|
"Zone",
|
||||||
"FT Cheat",
|
"Multi Function",
|
||||||
"Bind Keys",
|
"Bind Keys",
|
||||||
"Keyboard",
|
"Keyboard",
|
||||||
"Rotate",
|
"Rotate",
|
||||||
|
@ -117,11 +117,12 @@ void CEActionsSmartphone::initInstanceGame() {
|
||||||
bool is_cine = (gameid == "cine");
|
bool is_cine = (gameid == "cine");
|
||||||
bool is_touche = (gameid == "touche");
|
bool is_touche = (gameid == "touche");
|
||||||
bool is_agi = (gameid == "agi");
|
bool is_agi = (gameid == "agi");
|
||||||
|
bool is_parallaction = (gameid == "parallaction");
|
||||||
|
|
||||||
GUI_Actions::initInstanceGame();
|
GUI_Actions::initInstanceGame();
|
||||||
|
|
||||||
// See if a right click mapping could be needed
|
// See if a right click mapping could be needed
|
||||||
if (is_sword1 || is_sword2 || is_sky || is_queen || is_comi || is_gob || is_samnmax || is_cine || is_touche)
|
if (is_sword1 || is_sword2 || is_sky || is_queen || is_comi || is_gob || is_samnmax || is_cine || is_touche || is_parallaction)
|
||||||
_right_click_needed = true;
|
_right_click_needed = true;
|
||||||
|
|
||||||
// Initialize keys for different actions
|
// Initialize keys for different actions
|
||||||
|
@ -130,31 +131,41 @@ void CEActionsSmartphone::initInstanceGame() {
|
||||||
_action_enabled[SMARTPHONE_ACTION_SAVE] = false;
|
_action_enabled[SMARTPHONE_ACTION_SAVE] = false;
|
||||||
else if (is_queen) {
|
else if (is_queen) {
|
||||||
_action_enabled[SMARTPHONE_ACTION_SAVE] = true;
|
_action_enabled[SMARTPHONE_ACTION_SAVE] = true;
|
||||||
_key_action[SMARTPHONE_ACTION_SAVE].setAscii(286); // F1 key for FOTAQ
|
_key_action[SMARTPHONE_ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5); // F1 key for FOTAQ
|
||||||
} else if (is_sky) {
|
} else if (is_sky) {
|
||||||
_action_enabled[SMARTPHONE_ACTION_SAVE] = true;
|
_action_enabled[SMARTPHONE_ACTION_SAVE] = true;
|
||||||
_key_action[SMARTPHONE_ACTION_SAVE].setAscii(63);
|
_key_action[SMARTPHONE_ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5);
|
||||||
} else if (is_cine) {
|
} else if (is_cine) {
|
||||||
_action_enabled[SMARTPHONE_ACTION_SAVE] = true;
|
_action_enabled[SMARTPHONE_ACTION_SAVE] = true;
|
||||||
_key_action[SMARTPHONE_ACTION_SAVE].setAscii(291); //F10
|
_key_action[SMARTPHONE_ACTION_SAVE].setKey(Common::ASCII_F10, SDLK_F10); //F10
|
||||||
} else if (is_agi) {
|
} else if (is_agi) {
|
||||||
_action_enabled[SMARTPHONE_ACTION_SAVE] = true;
|
_action_enabled[SMARTPHONE_ACTION_SAVE] = true;
|
||||||
_key_action[SMARTPHONE_ACTION_SAVE].setAscii(SDLK_ESCAPE);
|
_key_action[SMARTPHONE_ACTION_SAVE].setKey(Common::ASCII_ESCAPE, SDLK_ESCAPE);
|
||||||
|
} else if (is_parallaction) {
|
||||||
|
_action_enabled[SMARTPHONE_ACTION_SAVE] = true;
|
||||||
|
_key_action[SMARTPHONE_ACTION_SAVE].setKey('s', SDLK_s);
|
||||||
} else {
|
} else {
|
||||||
_action_enabled[SMARTPHONE_ACTION_SAVE] = true;
|
_action_enabled[SMARTPHONE_ACTION_SAVE] = true;
|
||||||
_key_action[SMARTPHONE_ACTION_SAVE].setAscii(319); // F5 key
|
_key_action[SMARTPHONE_ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5); // F5 key
|
||||||
}
|
}
|
||||||
// Skip
|
// Skip
|
||||||
_action_enabled[SMARTPHONE_ACTION_SKIP] = true;
|
_action_enabled[SMARTPHONE_ACTION_SKIP] = true;
|
||||||
if (is_simon || is_sky || is_sword2 || is_queen || is_sword1 || is_gob || is_saga || is_kyra || is_touche)
|
if (is_simon || is_sky || is_sword2 || is_queen || is_sword1 || is_gob || is_saga || is_kyra || is_touche)
|
||||||
_key_action[SMARTPHONE_ACTION_SKIP].setAscii(VK_ESCAPE);
|
_key_action[SMARTPHONE_ACTION_SKIP].setKey(VK_ESCAPE);
|
||||||
else
|
else
|
||||||
_key_action[SMARTPHONE_ACTION_SKIP].setAscii(KEY_ALL_SKIP);
|
_key_action[SMARTPHONE_ACTION_SKIP].setKey(KEY_ALL_SKIP);
|
||||||
// Zone
|
// Zone
|
||||||
_action_enabled[SMARTPHONE_ACTION_ZONE] = true;
|
_action_enabled[SMARTPHONE_ACTION_ZONE] = true;
|
||||||
// FT Cheat
|
// Multi function key
|
||||||
_action_enabled[SMARTPHONE_ACTION_FT_CHEAT] = true;
|
_action_enabled[SMARTPHONE_ACTION_MULTI] = true;
|
||||||
_key_action[SMARTPHONE_ACTION_FT_CHEAT].setAscii(86); // shift-V
|
if (is_agi)
|
||||||
|
_key_action[SMARTPHONE_ACTION_MULTI].setKey(SDLK_PAUSE); // agi: show predictive dialog
|
||||||
|
else if (is_gob)
|
||||||
|
_key_action[SMARTPHONE_ACTION_MULTI].setKey(Common::ASCII_F1, SDLK_F1); // bargon : F1 to start
|
||||||
|
else if (gameid == "atlantis")
|
||||||
|
_key_action[SMARTPHONE_ACTION_MULTI].setKey(0, SDLK_KP0); // fate of atlantis : Ins to sucker-punch
|
||||||
|
else
|
||||||
|
_key_action[SMARTPHONE_ACTION_MULTI].setKey('V', SDLK_v, KMOD_SHIFT); // FT cheat : shift-V
|
||||||
// Bind keys
|
// Bind keys
|
||||||
_action_enabled[SMARTPHONE_ACTION_BINDKEYS] = true;
|
_action_enabled[SMARTPHONE_ACTION_BINDKEYS] = true;
|
||||||
}
|
}
|
||||||
|
@ -176,7 +187,7 @@ bool CEActionsSmartphone::perform(GUI::ActionType action, bool pushed) {
|
||||||
return true;
|
return true;
|
||||||
case SMARTPHONE_ACTION_SAVE:
|
case SMARTPHONE_ACTION_SAVE:
|
||||||
case SMARTPHONE_ACTION_SKIP:
|
case SMARTPHONE_ACTION_SKIP:
|
||||||
case SMARTPHONE_ACTION_FT_CHEAT:
|
case SMARTPHONE_ACTION_MULTI:
|
||||||
EventsBuffer::simulateKey(&_key_action[action], false);
|
EventsBuffer::simulateKey(&_key_action[action], false);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -186,7 +197,16 @@ bool CEActionsSmartphone::perform(GUI::ActionType action, bool pushed) {
|
||||||
switch (action) {
|
switch (action) {
|
||||||
case SMARTPHONE_ACTION_SAVE:
|
case SMARTPHONE_ACTION_SAVE:
|
||||||
case SMARTPHONE_ACTION_SKIP:
|
case SMARTPHONE_ACTION_SKIP:
|
||||||
case SMARTPHONE_ACTION_FT_CHEAT:
|
case SMARTPHONE_ACTION_MULTI:
|
||||||
|
if (action == SMARTPHONE_ACTION_SAVE && ConfMan.get("gameid") == "parallaction") {
|
||||||
|
// FIXME: This is a temporary solution. The engine should handle its own menus.
|
||||||
|
// Note that the user can accomplish this via the virtual keyboard as well, this is just for convenience
|
||||||
|
GUI::MessageDialog alert("Do you want to load or save the game?", "Load", "Save");
|
||||||
|
if (alert.runModal() == GUI::kMessageOK)
|
||||||
|
_key_action[action].setKey(SDLK_l);
|
||||||
|
else
|
||||||
|
_key_action[action].setKey(SDLK_s);
|
||||||
|
}
|
||||||
EventsBuffer::simulateKey(&_key_action[action], true);
|
EventsBuffer::simulateKey(&_key_action[action], true);
|
||||||
return true;
|
return true;
|
||||||
case SMARTPHONE_ACTION_RIGHTCLICK:
|
case SMARTPHONE_ACTION_RIGHTCLICK:
|
||||||
|
|
|
@ -45,7 +45,7 @@ enum smartphoneActionType {
|
||||||
SMARTPHONE_ACTION_SAVE,
|
SMARTPHONE_ACTION_SAVE,
|
||||||
SMARTPHONE_ACTION_SKIP,
|
SMARTPHONE_ACTION_SKIP,
|
||||||
SMARTPHONE_ACTION_ZONE,
|
SMARTPHONE_ACTION_ZONE,
|
||||||
SMARTPHONE_ACTION_FT_CHEAT,
|
SMARTPHONE_ACTION_MULTI,
|
||||||
SMARTPHONE_ACTION_BINDKEYS,
|
SMARTPHONE_ACTION_BINDKEYS,
|
||||||
SMARTPHONE_ACTION_KEYBOARD,
|
SMARTPHONE_ACTION_KEYBOARD,
|
||||||
SMARTPHONE_ACTION_ROTATE,
|
SMARTPHONE_ACTION_ROTATE,
|
||||||
|
|
|
@ -53,15 +53,13 @@ DWORD CEDevice::reg_access(TCHAR *key, TCHAR *val, DWORD data) {
|
||||||
return data;
|
return data;
|
||||||
|
|
||||||
cbdata = sizeof(DWORD);
|
cbdata = sizeof(DWORD);
|
||||||
if (RegQueryValueEx(regkey, val, NULL, NULL, (LPBYTE) &tmpval, &cbdata) != ERROR_SUCCESS)
|
if (RegQueryValueEx(regkey, val, NULL, NULL, (LPBYTE) &tmpval, &cbdata) != ERROR_SUCCESS) {
|
||||||
{
|
|
||||||
RegCloseKey(regkey);
|
RegCloseKey(regkey);
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
cbdata = sizeof(DWORD);
|
cbdata = sizeof(DWORD);
|
||||||
if (RegSetValueEx(regkey, val, 0, REG_DWORD, (LPBYTE) &data, cbdata) != ERROR_SUCCESS)
|
if (RegSetValueEx(regkey, val, 0, REG_DWORD, (LPBYTE) &data, cbdata) != ERROR_SUCCESS) {
|
||||||
{
|
|
||||||
RegCloseKey(regkey);
|
RegCloseKey(regkey);
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
@ -78,8 +76,7 @@ void CEDevice::backlight_xchg() {
|
||||||
REG_disp = reg_access(TEXT("ControlPanel\\Power"), TEXT("Display"), REG_disp);
|
REG_disp = reg_access(TEXT("ControlPanel\\Power"), TEXT("Display"), REG_disp);
|
||||||
|
|
||||||
h = CreateEvent(NULL, FALSE, FALSE, TEXT("BackLightChangeEvent"));
|
h = CreateEvent(NULL, FALSE, FALSE, TEXT("BackLightChangeEvent"));
|
||||||
if (h)
|
if (h) {
|
||||||
{
|
|
||||||
SetEvent(h);
|
SetEvent(h);
|
||||||
CloseHandle(h);
|
CloseHandle(h);
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,6 +35,8 @@ namespace CEGUI {
|
||||||
|
|
||||||
PanelKeyboard::PanelKeyboard(WORD reference) : Toolbar() {
|
PanelKeyboard::PanelKeyboard(WORD reference) : Toolbar() {
|
||||||
setBackground(reference);
|
setBackground(reference);
|
||||||
|
_state = false;
|
||||||
|
_lastKey.setKey(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -42,6 +44,7 @@ namespace CEGUI {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PanelKeyboard::action(int x, int y, bool pushed) {
|
bool PanelKeyboard::action(int x, int y, bool pushed) {
|
||||||
|
Key key;
|
||||||
|
|
||||||
if (checkInside(x, y)) {
|
if (checkInside(x, y)) {
|
||||||
int keyAscii = 0;
|
int keyAscii = 0;
|
||||||
|
@ -62,19 +65,35 @@ namespace CEGUI {
|
||||||
keyAscii = VK_BACK; keyCode = keyAscii;
|
keyAscii = VK_BACK; keyCode = keyAscii;
|
||||||
} else {
|
} else {
|
||||||
// Enter
|
// Enter
|
||||||
keyAscii = 13; keyCode = 10;
|
keyAscii = 13; keyCode = 13;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (keyAscii != 0) {
|
if (keyAscii != 0) {
|
||||||
_key.setAscii(keyAscii);
|
if (_state && pushed && keyCode != _lastKey.keycode()) // if cursor is still down and off the current key
|
||||||
_key.setKeycode(tolower(keyCode));
|
return false;
|
||||||
return EventsBuffer::simulateKey(&_key, pushed);
|
else if (_state && !pushed && keyCode != _lastKey.keycode()) { // cursor is up but off the current key
|
||||||
|
keyAscii = _lastKey.ascii();
|
||||||
|
keyCode = _lastKey.keycode();
|
||||||
|
}
|
||||||
|
_state = pushed;
|
||||||
|
_lastKey.setKey(keyAscii, tolower(keyCode));
|
||||||
|
|
||||||
|
key.setKey(keyAscii, tolower(keyCode));
|
||||||
|
return EventsBuffer::simulateKey(&key, pushed);
|
||||||
}
|
}
|
||||||
else
|
else if (_state && !pushed) { // cursor is in some forbidden region and is up
|
||||||
|
_state = false;
|
||||||
|
key = _lastKey;
|
||||||
|
return EventsBuffer::simulateKey(&key, false);
|
||||||
|
} else
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else
|
else if (_state && !pushed) { // cursor left the keyboard area and is up
|
||||||
|
_state = false;
|
||||||
|
key = _lastKey;
|
||||||
|
return EventsBuffer::simulateKey(&key, false);
|
||||||
|
} else
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,7 +44,8 @@ namespace CEGUI {
|
||||||
virtual ~PanelKeyboard();
|
virtual ~PanelKeyboard();
|
||||||
virtual bool action(int x, int y, bool pushed);
|
virtual bool action(int x, int y, bool pushed);
|
||||||
private:
|
private:
|
||||||
Key _key;
|
bool _state;
|
||||||
|
Key _lastKey;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,10 +32,9 @@ namespace CEKEYS {
|
||||||
SDL_Event ev = {0};
|
SDL_Event ev = {0};
|
||||||
|
|
||||||
if (!key->keycode())
|
if (!key->keycode())
|
||||||
key->setKeycode(key->ascii());
|
key->setKey(key->ascii(), key->ascii());
|
||||||
|
else if (!key->ascii())
|
||||||
if (!key->ascii())
|
key->setKey(key->keycode());
|
||||||
key->setAscii(key->keycode());
|
|
||||||
|
|
||||||
ev.type = (pushed ? SDL_KEYDOWN : SDL_KEYUP);
|
ev.type = (pushed ? SDL_KEYDOWN : SDL_KEYUP);
|
||||||
ev.key.keysym.mod = (SDLMod)key->flags();
|
ev.key.keysym.mod = (SDLMod)key->flags();
|
||||||
|
|
|
@ -3,9 +3,20 @@
|
||||||
# $URL$
|
# $URL$
|
||||||
# $Id$
|
# $Id$
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
## Set this to point to where the tools are installed on your system
|
||||||
|
|
||||||
wince_gcc_root = /cygdrive/e/wince-gcc-root
|
wince_gcc_root = /cygdrive/e/wince-gcc-root
|
||||||
srcdir = ../../..
|
|
||||||
VPATH = $(srcdir)
|
|
||||||
|
########################################################################
|
||||||
|
## Do you want a debug build or not?
|
||||||
|
|
||||||
|
#WINCE_DEBUG_BUILD = 1
|
||||||
|
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
## Disable whichever engines you want here
|
||||||
|
|
||||||
#DISABLE_SCUMM = 1
|
#DISABLE_SCUMM = 1
|
||||||
#DISABLE_SKY = 1
|
#DISABLE_SKY = 1
|
||||||
|
@ -20,10 +31,36 @@ DISABLE_LURE = 1
|
||||||
#DISABLE_SWORD1 = 1
|
#DISABLE_SWORD1 = 1
|
||||||
#DISABLE_SWORD2 = 1
|
#DISABLE_SWORD2 = 1
|
||||||
#DISABLE_TOUCHE = 1
|
#DISABLE_TOUCHE = 1
|
||||||
DISABLE_PARALLACTION = 1
|
#DISABLE_PARALLACTION = 1
|
||||||
DISABLE_CRUISE = 1
|
DISABLE_CRUISE = 1
|
||||||
|
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
## Pick which libraries you want to use here
|
||||||
|
|
||||||
|
USE_MAD = 1
|
||||||
|
USE_MPEG2 = 1
|
||||||
|
USE_TREMOR = 1
|
||||||
|
#USE_TREMOLO = 1
|
||||||
|
USE_FLAC = 1
|
||||||
|
USE_ZLIB = 1
|
||||||
|
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
## You're probably not going to want to change these defines...
|
||||||
|
|
||||||
#DISABLE_HQ_SCALERS = 1
|
#DISABLE_HQ_SCALERS = 1
|
||||||
|
USE_ARM_SOUND_ASM = 1
|
||||||
|
USE_ARM_SMUSH = 1
|
||||||
|
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
## Hopefully you shouldn't need to change anything below here. ##
|
||||||
|
########################################################################
|
||||||
|
|
||||||
|
|
||||||
|
srcdir = ../../..
|
||||||
|
VPATH = $(srcdir)
|
||||||
|
|
||||||
CXX = arm-wince-pe-g++
|
CXX = arm-wince-pe-g++
|
||||||
LD = arm-wince-pe-g++
|
LD = arm-wince-pe-g++
|
||||||
|
@ -38,9 +75,19 @@ ECHO = echo -n
|
||||||
CAT = cat
|
CAT = cat
|
||||||
AS = arm-wince-pe-as
|
AS = arm-wince-pe-as
|
||||||
|
|
||||||
DEFINES := -D_WIN32_WCE=300 -DARM -D__ARM__ -D_ARM_ -DUNICODE -DSCUMM_NEED_ALIGNMENT -DFPM_DEFAULT -DUSE_MAD -DNONSTANDARD_PORT -DUSE_TREMOR -DUSE_VORBIS -DUSE_MPEG2 -DWIN32 -DUSE_ZLIB
|
########################################################################
|
||||||
|
## Set up defines, includes, cflags etc
|
||||||
|
|
||||||
|
DEFINES := -D_WIN32_WCE=300 -DARM -D__ARM__ -D_ARM_ -DUNICODE -DSCUMM_NEED_ALIGNMENT
|
||||||
|
DEFINES += -DFPM_DEFAULT
|
||||||
|
|
||||||
|
DEFINES += -DNONSTANDARD_PORT
|
||||||
|
DEFINES += -DWIN32
|
||||||
DEFINES += -D__stdcall= -Dcdecl= -D__cdecl__= -D__cdecl= -Wno-multichar
|
DEFINES += -D__stdcall= -Dcdecl= -D__cdecl__= -D__cdecl= -Wno-multichar
|
||||||
#DEFINES += -DDEBUG -DUSE_WINDBG -g
|
|
||||||
|
ifdef WINCE_DEBUG_BUILD
|
||||||
|
DEFINES += -DDEBUG -DUSE_WINDBG -g
|
||||||
|
endif
|
||||||
|
|
||||||
INCLUDES := -I$(srcdir) -I. -I$(srcdir)/engines -Imissing/gcc -Ilibs/include -Ilibs/include/sdl -ICEgui -ICEkeys -I$(wince_gcc_root)/include
|
INCLUDES := -I$(srcdir) -I. -I$(srcdir)/engines -Imissing/gcc -Ilibs/include -Ilibs/include/sdl -ICEgui -ICEkeys -I$(wince_gcc_root)/include
|
||||||
|
|
||||||
|
@ -49,7 +96,47 @@ CFLAGS := -O3 -march=armv4 -mtune=xscale
|
||||||
CXXFLAGS := $(CFLAGS)
|
CXXFLAGS := $(CFLAGS)
|
||||||
|
|
||||||
LDFLAGS := -Llibs/lib -L$(wince_gcc_root)/lib
|
LDFLAGS := -Llibs/lib -L$(wince_gcc_root)/lib
|
||||||
LIBS := -lSDL -lzlib -lmad -lmpeg2 -ltremorce --entry WinMainCRTStartup
|
LIBS := -lSDL
|
||||||
|
|
||||||
|
ifdef USE_ZLIB
|
||||||
|
DEFINES += -DUSE_ZLIB
|
||||||
|
LIBS += -lzlib
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef USE_MAD
|
||||||
|
DEFINES += -DUSE_MAD
|
||||||
|
LIBS += -lmad
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef USE_MPEG2
|
||||||
|
DEFINES += -DUSE_MPEG2
|
||||||
|
LIBS += -lmpeg2
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef USE_TREMOR
|
||||||
|
DEFINES += -DUSE_TREMOR -DUSE_VORBIS
|
||||||
|
LIBS += -ltremorce
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef USE_TREMOLO
|
||||||
|
DEFINES += -DUSE_TREMOR -DUSE_VORBIS
|
||||||
|
INCLUDES += -Ilibs/include/tremolo
|
||||||
|
LIBS += -llibTremolo
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef USE_FLAC
|
||||||
|
DEFINES += -DUSE_FLAC
|
||||||
|
LIBS += -lFLAC
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef USE_ARM_SMUSH
|
||||||
|
DEFINES += -DUSE_ARM_SMUSH
|
||||||
|
endif
|
||||||
|
|
||||||
|
LIBS += --entry WinMainCRTStartup
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
# Targets follow here
|
||||||
|
|
||||||
TARGET = scummvm.exe
|
TARGET = scummvm.exe
|
||||||
OBJS :=
|
OBJS :=
|
||||||
|
@ -71,7 +158,6 @@ include $(srcdir)/Makefile.common
|
||||||
all: dist
|
all: dist
|
||||||
|
|
||||||
dist: $(TARGET)
|
dist: $(TARGET)
|
||||||
# bzip2 -fvk $(TARGET)
|
|
||||||
$(STRIP) $(TARGET)
|
$(STRIP) $(TARGET)
|
||||||
|
|
||||||
PocketSCUMM.o:
|
PocketSCUMM.o:
|
||||||
|
|
|
@ -1,506 +0,0 @@
|
||||||
ScummVM Windows CE FAQ
|
|
||||||
Last updated: 2006-06-20
|
|
||||||
Release version: 0.9.0
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
|
|
||||||
This document is intended to give common answers to specific ScummVM
|
|
||||||
issues on Windows CE, in 3 sections
|
|
||||||
* "General questions" : browse this section to get started and see
|
|
||||||
general issues
|
|
||||||
* "Game specific questions" : lists some common game specific issues
|
|
||||||
* "Support and links" : how to get support if you're still puzzled
|
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
General questions
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Which devices are supported ?
|
|
||||||
-----------------------------
|
|
||||||
|
|
||||||
Official build
|
|
||||||
--------------
|
|
||||||
|
|
||||||
The official build is based on the ARM architecture and should work with any
|
|
||||||
Pocket PC 2000, Pocket PC 2002, Pocket PC 2003, Pocket PC 2003 SE, Smartphone
|
|
||||||
2002, Smartphone 2003 or Windows Mobile based device.
|
|
||||||
|
|
||||||
Support for old ARM architectures (Handheld PCs, Palm Size PCs) and other CPUs
|
|
||||||
(MIPS, SH3) is discontinued. Feel free to generate builds for these
|
|
||||||
architectures and contact me to include them on ScummVM website.
|
|
||||||
|
|
||||||
Full support
|
|
||||||
------------
|
|
||||||
|
|
||||||
* ARM based Windows Mobile handhelds with QVGA resolution (240x320) slower
|
|
||||||
than 200 MHz (PocketPC platform)
|
|
||||||
|
|
||||||
All AdLib first generation games should work properly on these devices.
|
|
||||||
Sam'n'Max will be a bit too slow to be played with music.
|
|
||||||
More recent games (The Dig, Curse of Monkey Island, Broken Sword series)
|
|
||||||
and all VGA games will probably be too slow to be enjoyable.
|
|
||||||
|
|
||||||
* ARM based Windows Mobile handhelds with QVGA resolution (240x320) faster
|
|
||||||
than 200 MHz
|
|
||||||
|
|
||||||
All games should work properly on these devices.
|
|
||||||
VGA games will be resized and the font gets hard to read in this case (be sure
|
|
||||||
to install the talkie version the game :p)
|
|
||||||
|
|
||||||
* ARM based Windows Mobile handhelds with VGA resolution (640x480)
|
|
||||||
|
|
||||||
All non VGA games should work properly on these devices. They can be resized
|
|
||||||
with different scalers (not all desktop scalers are supported due to Embedded
|
|
||||||
Visual C++ very personal interpretation of the C++ standard).
|
|
||||||
VGA games will be displayed in true VGA mode, which can takes a lot of memory
|
|
||||||
and slow down the game (especially during scrollings). It will get better in
|
|
||||||
the next releases or with faster devices.
|
|
||||||
|
|
||||||
* Windows Mobile Smartphones (176x220 or 240x320)
|
|
||||||
|
|
||||||
Early support is provided for all 320x200 games.
|
|
||||||
The font can get hard to read (you should prefer talkie games, or wear glasses)
|
|
||||||
|
|
||||||
* Support for Windows Mobile 5 is experimental but should work. "Flipping" devices
|
|
||||||
such as the HTC Wizard or HTC Universal work only in portait (closed) mode for the
|
|
||||||
moment.
|
|
||||||
|
|
||||||
Partial / Discontinued support
|
|
||||||
------------------------------
|
|
||||||
|
|
||||||
Support for the following devices is not complete, not working properly or
|
|
||||||
discontinued because the device is now obsolete. Feel free to contribute and
|
|
||||||
improve the port for your favorite device, or use the last release built with
|
|
||||||
the previous port architecture (0.5.1) which was less resource hungry and
|
|
||||||
supported more exotic devices.
|
|
||||||
|
|
||||||
* "Paletted" devices (non "true color")
|
|
||||||
|
|
||||||
These devices will be supported through the GDI layer which will slow down the
|
|
||||||
games a lot. You can try to disable the music/sound effects to get a better
|
|
||||||
game experience.
|
|
||||||
|
|
||||||
* "Mono" devices
|
|
||||||
|
|
||||||
I don't even think anything will be displayed on these devices :) you can try
|
|
||||||
and report your success ...
|
|
||||||
|
|
||||||
* MIPS/SH3 devices with QVGA resolution (240x320), "true color"
|
|
||||||
|
|
||||||
Some devices may be a bit too slow, especially if direct screen access (GAPI)
|
|
||||||
is not supported on these devices.
|
|
||||||
|
|
||||||
* ARM/MIPS/SH3 devices with VGA resolution (640x480) (Palm Size PC / Handheld
|
|
||||||
PC platform)
|
|
||||||
|
|
||||||
True VGA games will probably be too slow to run properly on these devices even
|
|
||||||
if they can support them ...
|
|
||||||
|
|
||||||
* ARM/MIPS/SH3 devices with desktop resolution (800x600) (Handheld PC platform)
|
|
||||||
|
|
||||||
No, there will never be ANY scaler supporting 800x600 resolution, because
|
|
||||||
320x200 games CANNOT be resized to a 800x600 by a simple operation.
|
|
||||||
|
|
||||||
And the device will probably be too slow to perform any kind of graphic
|
|
||||||
transform anyway :)
|
|
||||||
|
|
||||||
How do I install ScummVM for Windows CE ?
|
|
||||||
-----------------------------------------
|
|
||||||
|
|
||||||
If the current release includes a .EXE installer, ScummVM for Windows CE
|
|
||||||
will be installed without hassle.
|
|
||||||
Otherwise, you'll unzip the release on your desktop computer, and copy
|
|
||||||
all files on your device.
|
|
||||||
|
|
||||||
If you're using a Pocket PC 2000 operating system, be sure to have GAPI
|
|
||||||
installed - it's available on Microsoft website http://www.microsoft.com
|
|
||||||
|
|
||||||
How do I install a game ?
|
|
||||||
-------------------------
|
|
||||||
|
|
||||||
You'll at least need to copy all the data files from your game, in a
|
|
||||||
sub-directory of your game directory.
|
|
||||||
|
|
||||||
You'll need to put the data files in a directory named after ScummVM game
|
|
||||||
name (see "Supported Game" section in ScummVM readme) for the games having
|
|
||||||
"generic" data files (.LFL files). Recent games can be put in any directory.
|
|
||||||
|
|
||||||
You can compress the multimedia files (sound/video) as described in the
|
|
||||||
ScummVM readme.
|
|
||||||
|
|
||||||
You can compress the audio tracks of Loom or Monkey Island 1 as described in
|
|
||||||
the ScummVM readme. If you are running these games on a slow device with Ogg
|
|
||||||
Vorbis compression, it's recommended to sample the files to 11 kHz (this sample
|
|
||||||
rate is not supported by other versions of ScummVM).
|
|
||||||
|
|
||||||
If you need more details, you can check SirDave's mini-manual online available
|
|
||||||
at: http://forums.scummvm.org/viewtopic.php?t=936
|
|
||||||
and at: http://www.pocketmatrix.com/forums/viewtopic.php?t=8606
|
|
||||||
|
|
||||||
How do I run a game ?
|
|
||||||
---------------------
|
|
||||||
|
|
||||||
If it's the first time you're running ScummVM for Windows CE, have installed or
|
|
||||||
removed games, you need to rescan your game directory.
|
|
||||||
* Select Scan, tap the root directory of your games, and tap "Yes" to begin
|
|
||||||
an automatic scan of the installed games.
|
|
||||||
|
|
||||||
Usually all games are detected and you can start playing right away. If your
|
|
||||||
game is not detected check its directory name and your data files.
|
|
||||||
|
|
||||||
To play a game, tap on its name then tap the "Play" button or double tap its
|
|
||||||
name.
|
|
||||||
|
|
||||||
How do I play a game on a Pocket PC or Handheld PC device ?
|
|
||||||
-----------------------------------------------------------
|
|
||||||
|
|
||||||
The stylus is your mouse cursor, and a tap is a left mouse button click.
|
|
||||||
|
|
||||||
As the Pocket PC lacks some keys, a toolbar is displayed at the bottom of the
|
|
||||||
screen to make the most common functions just a tap away
|
|
||||||
* The disk icon opens ScummVM options menu to save your game, or change your
|
|
||||||
current game settings.
|
|
||||||
* The movie icon skips a non interactive sequence, the current dialog or
|
|
||||||
behaves like the ESC key on a regular keyboard
|
|
||||||
* The sound icon turns all sound effects and music off and on
|
|
||||||
* The key icon allow you to map a key action to a device button.
|
|
||||||
* The monkey icon switches between portrait, landscape and inverse landscape
|
|
||||||
mode.
|
|
||||||
|
|
||||||
You can map additional actions on your device hardware buttons using the
|
|
||||||
"Options" / "Key" menu in the ScummVM options menu. To associate an action to
|
|
||||||
a key, tap the action, then the "Map" button and press the hardware key.
|
|
||||||
The following actions are available
|
|
||||||
* Pause : pause the game
|
|
||||||
* Save : open ScummVM option menu
|
|
||||||
* Quit : quit ScummVM (without saving, be careful when using it)
|
|
||||||
* Skip : skip a non interactive sequence, the current dialog or
|
|
||||||
behaves like the ESC key on a regular keyboard
|
|
||||||
* Hide : hide or display the toolbar
|
|
||||||
- YOU MUST HIDE THE TOOLBAR TO SCROLL THROUGH THE INVENTORY IN ZAK -
|
|
||||||
* Keyboard : hide or display the virtual keyboard
|
|
||||||
- YOU MUST DISPLAY THE KEYBOARD TO FIGHT IN INDIANA JONES 3 -
|
|
||||||
* Sound : turns all sound effects and music off and on
|
|
||||||
* Right click : acts as a right mouse button click
|
|
||||||
- YOU MUST MAP THIS ACTION TO PLAY THE FOLLOWING GAMES -
|
|
||||||
- SAM & MAX, BENEATH A STEEL SKY, CURSE OF MONKEY ISLAND -
|
|
||||||
* Cursor : hide or display the mouse cursor
|
|
||||||
* Free look : go in or out of free-look mode. In this mode, you can tap
|
|
||||||
the screen to look for interesting locations without walking.
|
|
||||||
* Zoom up : magnify the upper part of the screen for 640x480 games
|
|
||||||
rendered on a 320x240 device.
|
|
||||||
* Zoom down : magnify the lower part of the screen for 640x480 games
|
|
||||||
rendered on a 320x240 device.
|
|
||||||
* FT Cheat : win a Full Throttle action sequence
|
|
||||||
* Bind keys : map a key action to a device button
|
|
||||||
* Up,Down,Left:
|
|
||||||
Right, : emulate mouse/stylus behavior
|
|
||||||
Left Click :
|
|
||||||
|
|
||||||
If you start a game when a Right click mapping is necessary, ScummVM will ask
|
|
||||||
you to map one of your hardware key to this action before playing. Just press
|
|
||||||
the key you want to map if you see this message.
|
|
||||||
|
|
||||||
How do I hide the toolbar ?
|
|
||||||
----------------------------
|
|
||||||
|
|
||||||
A shortcut is available to hide the toolbar directly from the game screen from
|
|
||||||
release 0.8.0. Double tapping the stylus at the top of the screen will switch
|
|
||||||
between a visible toolbar panel, a virtual keyboard, and an invisible panel.
|
|
||||||
If any part of the screen is obscured by the toolbar (like the load/save game
|
|
||||||
dialogs) you can use the invisible panel mode to get to it. For 320x200 games
|
|
||||||
on QVGA Pocket PCs, when the panel is hidden the game screen is resized to
|
|
||||||
320x240 for better gaming experience.
|
|
||||||
|
|
||||||
How do I play a game on a Microsoft Smartphone device ?
|
|
||||||
-------------------------------------------------------
|
|
||||||
|
|
||||||
When playing on a Smartphone, the cursor and mouse buttons are emulated by
|
|
||||||
a set of default keys :
|
|
||||||
4 Move up
|
|
||||||
6 Move down
|
|
||||||
8 Move left
|
|
||||||
2 Move right
|
|
||||||
Hotkey 1 Left mouse button click
|
|
||||||
Hotkey 2 Right mouse button click
|
|
||||||
Return/Action Open the key mapping menu
|
|
||||||
|
|
||||||
Note that this means that the input will be "inversed" on a 240x320 (Windows
|
|
||||||
Mobile 2005) Smartphone. You'll have to remap the keys.
|
|
||||||
|
|
||||||
A few options are also emulated by a set of default keys :
|
|
||||||
|
|
||||||
0 Options menu
|
|
||||||
Back Skip
|
|
||||||
# Zone option
|
|
||||||
|
|
||||||
The cursor will move faster if you keep the key down. You can tweak this
|
|
||||||
behaviour in the configuration file described below.
|
|
||||||
|
|
||||||
The "Zone" key is a *very* valuable addition allowing you to jump quickly
|
|
||||||
between three screen zones : the game zone, the verbs zone and the inventory
|
|
||||||
zone. When you switch to a zone the cursor will be reset to its former location
|
|
||||||
in this zone.
|
|
||||||
|
|
||||||
There are two more actions available for mapping:
|
|
||||||
- Keyboard: Shows hides a virtual keyboard which can be use whenever text
|
|
||||||
input is required in a game, or a dialog.
|
|
||||||
- Rotate : Flips the screen orientation between normal and inverse landscape.
|
|
||||||
|
|
||||||
You can change the keys mapping during the game in the key mapping menu.
|
|
||||||
|
|
||||||
Note that you'll need to push the Action button (center of the pad) to quit
|
|
||||||
a Simon game.
|
|
||||||
|
|
||||||
How can I apply a ScummVM command line option (f.e. to change the language)
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
See the section regarding the configuration file (scummvm.ini) in ScummVM
|
|
||||||
README file - the same keywords apply.
|
|
||||||
|
|
||||||
Some parameters are specific to this port :
|
|
||||||
|
|
||||||
game specific section (f.e. [monkey2]) - performance options
|
|
||||||
|
|
||||||
high_sample_rate bool Desktop quality (22 kHz) sound output if set.
|
|
||||||
11 kHz otherwise.
|
|
||||||
The default is 11 kHz.
|
|
||||||
If you have a fast device, you can set this to
|
|
||||||
true to enjoy better sound effects and music.
|
|
||||||
FM_high_quality bool Desktop quality FM synthesis if set. Lower
|
|
||||||
quality otherwise. The default is low quality.
|
|
||||||
You can change this if you have a fast device.
|
|
||||||
sound_thread_priority int Set the priority of the sound thread
|
|
||||||
(given to SetThreadPriority API)
|
|
||||||
Smush_force_redraw int Force a Smush frame redraw every X missed
|
|
||||||
frames. Mainly used for Full Throttle action
|
|
||||||
sequences. Setting it lower gives more
|
|
||||||
priority to screen redraws. Setting it higher
|
|
||||||
gives more priority to stylus/keyboard input.
|
|
||||||
The default is 30.
|
|
||||||
|
|
||||||
game specific section (f.e. [monkey2]) - game options
|
|
||||||
|
|
||||||
landscape int 0: Portrait, 1: Landscape, 2: Inverse Landscape
|
|
||||||
|
|
||||||
[scummvm] section - keys definition
|
|
||||||
|
|
||||||
You usually do not wish to modify these values directly, as they are set
|
|
||||||
by the option dialog, and are only given here for reference.
|
|
||||||
|
|
||||||
action_mapping_version int Mapping version linked to ScummVM version.
|
|
||||||
action_mapping string Hex codes describing the key associated to
|
|
||||||
each different action.
|
|
||||||
|
|
||||||
[scummvm] section - mouse emulation tuning
|
|
||||||
|
|
||||||
You can tweak these parameters to customize how the cursor is handled.
|
|
||||||
|
|
||||||
repeatTrigger int Number of milliseconds a key must be held to
|
|
||||||
consider being repeated.
|
|
||||||
|
|
||||||
repeatX int Number of key repeat events before changing
|
|
||||||
horizontal cursor behaviour.
|
|
||||||
stepX1 int Horizontal cursor offset value when the key is
|
|
||||||
not repeated.
|
|
||||||
stepX2 int Horizontal cursor offset value when the key is
|
|
||||||
repeated less than repeatX.
|
|
||||||
stepX3 int Horizontal cursor offset value when the key is
|
|
||||||
repeated more than repeatX.
|
|
||||||
|
|
||||||
|
|
||||||
repeatY int Number of key repeat events before changing
|
|
||||||
vertical cursor behaviour.
|
|
||||||
stepY1 int Vertical cursor offset value when the key is
|
|
||||||
not repeated.
|
|
||||||
stepY2 int Horizontal cursor offset value when the key is
|
|
||||||
repeated less than repeatY.
|
|
||||||
stepY3 int Vertical cursor offset value when the key is
|
|
||||||
repeated more than repeatY.
|
|
||||||
|
|
||||||
Game xxx is too slow on my device
|
|
||||||
---------------------------------
|
|
||||||
|
|
||||||
Even if it shouldn't happen (this port is running almost correctly on a
|
|
||||||
80 / 120 MHz first generation SPV phone), you can try some things :
|
|
||||||
|
|
||||||
* Disable sound in the engine (see the global README)
|
|
||||||
* Play with the priority of the sound thread (change the
|
|
||||||
sound_thread_priority value - the higher the lower priority)
|
|
||||||
|
|
||||||
And don't forget to report your progress in the ScummVM forum !
|
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
Game specific questions
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
|
|
||||||
--------------------------
|
|
||||||
-- Beneath a Steel Sky --
|
|
||||||
--------------------------
|
|
||||||
|
|
||||||
Introduction movie is too slow or never ends ...
|
|
||||||
-------------------------------------------------
|
|
||||||
|
|
||||||
Skip it :)
|
|
||||||
|
|
||||||
How can I open the inventory in Beneath a Steel Sky ?
|
|
||||||
---------------------------------------------------
|
|
||||||
|
|
||||||
Tap the top of the screen. Check your stylus calibration if you still cannot
|
|
||||||
open it.
|
|
||||||
|
|
||||||
How can I use an item in Beneath a Steel Sky ?
|
|
||||||
----------------------------------------------
|
|
||||||
|
|
||||||
You need to map the right click button (see the General Questions section).
|
|
||||||
|
|
||||||
----------------------------
|
|
||||||
-- Curse of Monkey Island --
|
|
||||||
----------------------------
|
|
||||||
|
|
||||||
How can I open the inventory in Curse of Monkey Island ?
|
|
||||||
------------------------------------------------------
|
|
||||||
|
|
||||||
You need to map the right click button (see the General Questions section).
|
|
||||||
|
|
||||||
I'm experiencing random crashes ...
|
|
||||||
------------------------------------
|
|
||||||
|
|
||||||
This game has high memory requirements, and may crash sometimes on low
|
|
||||||
memory devices. Continue your game with the latest automatically saved
|
|
||||||
game and everything should be fine.
|
|
||||||
You can consider removing the music and voice files (VOXDISK.BUN, MUSDISK.BUN)
|
|
||||||
to lower these requirements.
|
|
||||||
|
|
||||||
Sound synchronization is lost in Curse of Monkey Island videos
|
|
||||||
--------------------------------------------------------------
|
|
||||||
|
|
||||||
This is a port bug which is very noticeable in VGA mode. It can probably be
|
|
||||||
fixed with a faster blitting routine or a faster device.
|
|
||||||
|
|
||||||
--------------------
|
|
||||||
-- Full Throttle --
|
|
||||||
--------------------
|
|
||||||
|
|
||||||
I'm experiencing random crashes ...
|
|
||||||
------------------------------------
|
|
||||||
|
|
||||||
This game has high memory requirements, and may crash sometimes on low
|
|
||||||
memory devices. Continue your game with the latest automatically saved
|
|
||||||
game and everything should be fine.
|
|
||||||
You can consider removing the voice file (MONSTER.SOU) and disable the
|
|
||||||
music to lower these requirements.
|
|
||||||
|
|
||||||
----------------------------------------
|
|
||||||
-- Indiana Jones and the Last Crusade --
|
|
||||||
----------------------------------------
|
|
||||||
|
|
||||||
How can I fight in Indiana Jones and the Last Crusade ?
|
|
||||||
-----------------------------------------------------
|
|
||||||
|
|
||||||
You need to map the keyboard button (see the General Questions section).
|
|
||||||
|
|
||||||
---------------
|
|
||||||
-- Sam & Max --
|
|
||||||
---------------
|
|
||||||
|
|
||||||
How can I change the current action ?
|
|
||||||
-------------------------------------
|
|
||||||
|
|
||||||
You need to map the right click button (see the General Questions section).
|
|
||||||
|
|
||||||
How can I exit a mini game ?
|
|
||||||
----------------------------
|
|
||||||
|
|
||||||
Use the skip toolbar icon (see the General Questions section).
|
|
||||||
|
|
||||||
-------------------
|
|
||||||
-- Simon 1 and 2 --
|
|
||||||
--------------------
|
|
||||||
|
|
||||||
How can I save or quit in Simon ?
|
|
||||||
--------------------------------
|
|
||||||
|
|
||||||
"Use" (use the use verb :p) the postcard. The ScummVM option dialog is disabled
|
|
||||||
in Simon games.
|
|
||||||
|
|
||||||
On Smartphone, you'll need to push the Action button (center of the pad) to
|
|
||||||
quit the game.
|
|
||||||
|
|
||||||
-------------
|
|
||||||
-- The Dig --
|
|
||||||
-------------
|
|
||||||
|
|
||||||
I'm experiencing random crashes ...
|
|
||||||
------------------------------------
|
|
||||||
|
|
||||||
This game has high memory requirements, and may crash sometimes on low
|
|
||||||
memory devices. Continue your game with the latest automatically saved
|
|
||||||
game and everything should be fine.
|
|
||||||
You can consider removing the music and voice files (VOXDISK.BUN, MUSDISK.BUN)
|
|
||||||
to lower these requirements.
|
|
||||||
|
|
||||||
--------------------
|
|
||||||
-- Zak Mc Kracken --
|
|
||||||
--------------------
|
|
||||||
|
|
||||||
How can I scroll through my inventory items in Zak Mc Kracken ?
|
|
||||||
-------------------------------------------------------------
|
|
||||||
|
|
||||||
You need to map the hide toolbar button (see the General Questions section) or
|
|
||||||
double tap at the top of the screen (from 0.8.0+)
|
|
||||||
|
|
||||||
--------------------
|
|
||||||
-- Broken Sword 2 --
|
|
||||||
--------------------
|
|
||||||
|
|
||||||
I've installed the movies pack but they are not playing
|
|
||||||
-------------------------------------------------------
|
|
||||||
|
|
||||||
MPEG 2 playback takes too much memory in the current release, and may prevent
|
|
||||||
movies from playing in VGA mode. This may get better in the next releases.
|
|
||||||
|
|
||||||
----------------
|
|
||||||
-- Gobliiins --
|
|
||||||
----------------
|
|
||||||
|
|
||||||
Cursor is grabled after loading a game
|
|
||||||
--------------------------------------
|
|
||||||
|
|
||||||
Due to a bug in 0.8.0, you'll have to tap the stylus somewhere on the game
|
|
||||||
screen between 2 letters when entering a code. Otherwise the cursor will get
|
|
||||||
garbled.
|
|
||||||
|
|
||||||
This has not been retested for 0.8.1 but should be fixed.
|
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
Support
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Help, I've read everything and ...
|
|
||||||
-----------------------------------
|
|
||||||
|
|
||||||
Luckily, as there is a huge variety of Windows Mobile devices, a specific forum
|
|
||||||
is dedicated to this ScummVM port. You can ask your question on the WinCE
|
|
||||||
ScummVM forum available at http://forums.scummvm.org/viewforum.php?f=6
|
|
||||||
|
|
||||||
Some older questions and very nice tutorials are still available on the historic
|
|
||||||
PocketMatrix forum at http://www.pocketmatrix.com/forums/viewforum.php?f=20
|
|
||||||
where the community is always glad to help and have dealt with all my bugs for more
|
|
||||||
than three years now :)
|
|
||||||
|
|
||||||
I think I found a bug, ScummVM crashes in ...
|
|
||||||
---------------------------------------------
|
|
||||||
|
|
||||||
See the "Reporting Bugs" section in ScummVM readme.
|
|
||||||
|
|
||||||
If you have a Pocket PC or Handheld PC, be sure to include its resolution (obtained
|
|
||||||
on the second dialog displayed on the "About" menu) in your bug report.
|
|
||||||
|
|
||||||
If you cannot reproduce this bug on another ScummVM version, you can cross
|
|
||||||
post your bug report on ScummVM forums.
|
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
Good Luck and Happy Adventuring!
|
|
||||||
The ScummVM team.
|
|
||||||
http://www.scummvm.org/
|
|
||||||
------------------------------------------------------------------------
|
|
|
@ -314,9 +314,6 @@ void OSystem_WINCE3::initScreenInfos() {
|
||||||
_isOzone = 0;
|
_isOzone = 0;
|
||||||
SDL_Rect **r;
|
SDL_Rect **r;
|
||||||
r = SDL_ListModes(NULL, 0);
|
r = SDL_ListModes(NULL, 0);
|
||||||
printf("listmodes: %dx%d\n", r[0]->w, r[0]->h);
|
|
||||||
//_platformScreenWidth = GetSystemMetrics(SM_CXSCREEN);
|
|
||||||
//_platformScreenHeight = GetSystemMetrics(SM_CYSCREEN);
|
|
||||||
_platformScreenWidth = r[0]->w;
|
_platformScreenWidth = r[0]->w;
|
||||||
_platformScreenHeight = r[0]->h;
|
_platformScreenHeight = r[0]->h;
|
||||||
}
|
}
|
||||||
|
@ -330,7 +327,7 @@ bool OSystem_WINCE3::isOzone() {
|
||||||
|
|
||||||
OSystem_WINCE3::OSystem_WINCE3() : OSystem_SDL(),
|
OSystem_WINCE3::OSystem_WINCE3() : OSystem_SDL(),
|
||||||
_orientationLandscape(0), _newOrientation(0), _panelInitialized(false),
|
_orientationLandscape(0), _newOrientation(0), _panelInitialized(false),
|
||||||
_panelVisible(true), _panelStateForced(false), _forceHideMouse(false),
|
_panelVisible(true), _panelStateForced(false), _forceHideMouse(false), _unfilteredkeys(false),
|
||||||
_freeLook(false), _forcePanelInvisible(false), _toolbarHighDrawn(false), _zoomUp(false), _zoomDown(false),
|
_freeLook(false), _forcePanelInvisible(false), _toolbarHighDrawn(false), _zoomUp(false), _zoomDown(false),
|
||||||
_scalersChanged(false), _monkeyKeyboard(false), _lastKeyPressed(0), _tapTime(0),
|
_scalersChanged(false), _monkeyKeyboard(false), _lastKeyPressed(0), _tapTime(0),
|
||||||
_saveToolbarState(false), _saveActiveToolbar(NAME_MAIN_PANEL), _rbutton(false), _hasfocus(true),
|
_saveToolbarState(false), _saveActiveToolbar(NAME_MAIN_PANEL), _rbutton(false), _hasfocus(true),
|
||||||
|
@ -771,6 +768,7 @@ void OSystem_WINCE3::setFeatureState(Feature f, bool enable) {
|
||||||
switch(f) {
|
switch(f) {
|
||||||
case kFeatureFullscreenMode:
|
case kFeatureFullscreenMode:
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case kFeatureVirtualKeyboard:
|
case kFeatureVirtualKeyboard:
|
||||||
if (_hasSmartphoneResolution)
|
if (_hasSmartphoneResolution)
|
||||||
return;
|
return;
|
||||||
|
@ -790,6 +788,12 @@ void OSystem_WINCE3::setFeatureState(Feature f, bool enable) {
|
||||||
//_toolbarHandler.setVisible(_saveToolbarState);
|
//_toolbarHandler.setVisible(_saveToolbarState);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
case kFeatureDisableKeyFiltering:
|
||||||
|
if (_hasSmartphoneResolution)
|
||||||
|
_unfilteredkeys = enable;
|
||||||
|
return;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
OSystem_SDL::setFeatureState(f, enable);
|
OSystem_SDL::setFeatureState(f, enable);
|
||||||
}
|
}
|
||||||
|
@ -1583,6 +1587,17 @@ void OSystem_WINCE3::internUpdateScreen() {
|
||||||
_forceFull = false;
|
_forceFull = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Graphics::Surface *OSystem_WINCE3::lockScreen() {
|
||||||
|
// FIXME: Fingolfing asks: Why is undrawMouse() needed here?
|
||||||
|
// Please document this.
|
||||||
|
undrawMouse();
|
||||||
|
return OSystem_SDL::lockScreen();
|
||||||
|
}
|
||||||
|
|
||||||
|
void OSystem_WINCE3::unlockScreen() {
|
||||||
|
OSystem_SDL::unlockScreen();
|
||||||
|
}
|
||||||
|
|
||||||
bool OSystem_WINCE3::saveScreenshot(const char *filename) {
|
bool OSystem_WINCE3::saveScreenshot(const char *filename) {
|
||||||
assert(_hwscreen != NULL);
|
assert(_hwscreen != NULL);
|
||||||
|
|
||||||
|
@ -2067,18 +2082,30 @@ void OSystem_WINCE3::addDirtyRect(int x, int y, int w, int h, bool mouseRect) {
|
||||||
OSystem_SDL::addDirtyRect(x, y, w, h, false);
|
OSystem_SDL::addDirtyRect(x, y, w, h, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int mapKeyCE(SDLKey key, SDLMod mod, Uint16 unicode)
|
static int mapKeyCE(SDLKey key, SDLMod mod, Uint16 unicode, bool unfilter)
|
||||||
{
|
{
|
||||||
if (GUI::Actions::Instance()->mappingActive())
|
if (GUI::Actions::Instance()->mappingActive())
|
||||||
return key;
|
return key;
|
||||||
|
|
||||||
|
if (unfilter) {
|
||||||
|
switch (key) {
|
||||||
|
case SDLK_ESCAPE:
|
||||||
|
return SDLK_BACKSPACE;
|
||||||
|
case SDLK_F8:
|
||||||
|
return SDLK_ASTERISK;
|
||||||
|
case SDLK_F9:
|
||||||
|
return SDLK_HASH;
|
||||||
|
}
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
if (key >= SDLK_KP0 && key <= SDLK_KP9) {
|
if (key >= SDLK_KP0 && key <= SDLK_KP9) {
|
||||||
return key - SDLK_KP0 + '0';
|
return key - SDLK_KP0 + '0';
|
||||||
} else if (key >= SDLK_UP && key <= SDLK_PAGEDOWN) {
|
} else if (key >= SDLK_UP && key <= SDLK_PAGEDOWN) {
|
||||||
return key;
|
return key;
|
||||||
} else if (unicode) {
|
} else if (unicode) {
|
||||||
return unicode;
|
return unicode;
|
||||||
} else if (key >= 'a' && key <= 'z' && mod & KMOD_SHIFT) {
|
} else if (key >= 'a' && key <= 'z' && (mod & KMOD_SHIFT)) {
|
||||||
return key & ~0x20;
|
return key & ~0x20;
|
||||||
} else if (key >= SDLK_NUMLOCK && key <= SDLK_EURO) {
|
} else if (key >= SDLK_NUMLOCK && key <= SDLK_EURO) {
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -2113,9 +2140,9 @@ bool OSystem_WINCE3::pollEvent(Common::Event &event) {
|
||||||
while(SDL_PollEvent(&ev)) {
|
while(SDL_PollEvent(&ev)) {
|
||||||
switch(ev.type) {
|
switch(ev.type) {
|
||||||
case SDL_KEYDOWN:
|
case SDL_KEYDOWN:
|
||||||
// KMOD_RESERVED is used if the key has been injected by an external buffer
|
|
||||||
debug(1, "Key down %X %s", ev.key.keysym.sym, SDL_GetKeyName((SDLKey)ev.key.keysym.sym));
|
debug(1, "Key down %X %s", ev.key.keysym.sym, SDL_GetKeyName((SDLKey)ev.key.keysym.sym));
|
||||||
if (ev.key.keysym.mod != KMOD_RESERVED) {
|
// KMOD_RESERVED is used if the key has been injected by an external buffer
|
||||||
|
if (ev.key.keysym.mod != KMOD_RESERVED && !_unfilteredkeys) {
|
||||||
keyEvent = true;
|
keyEvent = true;
|
||||||
_lastKeyPressed = ev.key.keysym.sym;
|
_lastKeyPressed = ev.key.keysym.sym;
|
||||||
_keyRepeatTime = currentTime;
|
_keyRepeatTime = currentTime;
|
||||||
|
@ -2125,19 +2152,27 @@ bool OSystem_WINCE3::pollEvent(Common::Event &event) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
event.type = Common::EVENT_KEYDOWN;
|
|
||||||
event.kbd.keycode = ev.key.keysym.sym;
|
|
||||||
event.kbd.ascii = mapKeyCE(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode);
|
|
||||||
|
|
||||||
if (GUI_Actions::Instance()->mappingActive())
|
if (GUI_Actions::Instance()->mappingActive())
|
||||||
event.kbd.flags = 0xFF;
|
event.kbd.flags = 0xFF;
|
||||||
|
else if (ev.key.keysym.sym == SDLK_PAUSE) {
|
||||||
|
_lastKeyPressed = 0;
|
||||||
|
event.type = Common::EVENT_PREDICTIVE_DIALOG;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
event.type = Common::EVENT_KEYDOWN;
|
||||||
|
if (!_unfilteredkeys)
|
||||||
|
event.kbd.keycode = (Common::KeyCode)ev.key.keysym.sym;
|
||||||
|
else
|
||||||
|
event.kbd.keycode = (Common::KeyCode)mapKeyCE(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode, _unfilteredkeys);
|
||||||
|
event.kbd.ascii = mapKeyCE(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode, _unfilteredkeys);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case SDL_KEYUP:
|
case SDL_KEYUP:
|
||||||
// KMOD_RESERVED is used if the key has been injected by an external buffer
|
|
||||||
debug(1, "Key up %X %s", ev.key.keysym.sym, SDL_GetKeyName((SDLKey)ev.key.keysym.sym));
|
debug(1, "Key up %X %s", ev.key.keysym.sym, SDL_GetKeyName((SDLKey)ev.key.keysym.sym));
|
||||||
if (ev.key.keysym.mod != KMOD_RESERVED) {
|
// KMOD_RESERVED is used if the key has been injected by an external buffer
|
||||||
|
if (ev.key.keysym.mod != KMOD_RESERVED && !_unfilteredkeys) {
|
||||||
keyEvent = true;
|
keyEvent = true;
|
||||||
_lastKeyPressed = 0;
|
_lastKeyPressed = 0;
|
||||||
|
|
||||||
|
@ -2145,12 +2180,19 @@ bool OSystem_WINCE3::pollEvent(Common::Event &event) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
event.type = Common::EVENT_KEYUP;
|
|
||||||
event.kbd.keycode = ev.key.keysym.sym;
|
|
||||||
event.kbd.ascii = mapKeyCE(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode);
|
|
||||||
|
|
||||||
if (GUI_Actions::Instance()->mappingActive())
|
if (GUI_Actions::Instance()->mappingActive())
|
||||||
event.kbd.flags = 0xFF;
|
event.kbd.flags = 0xFF;
|
||||||
|
else if (ev.key.keysym.sym == SDLK_PAUSE) {
|
||||||
|
_lastKeyPressed = 0;
|
||||||
|
return false; // chew up the show agi dialog key up event
|
||||||
|
}
|
||||||
|
|
||||||
|
event.type = Common::EVENT_KEYUP;
|
||||||
|
if (!_unfilteredkeys)
|
||||||
|
event.kbd.keycode = (Common::KeyCode)ev.key.keysym.sym;
|
||||||
|
else
|
||||||
|
event.kbd.keycode = (Common::KeyCode)mapKeyCE(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode, _unfilteredkeys);
|
||||||
|
event.kbd.ascii = mapKeyCE(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode, _unfilteredkeys);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
|
|
@ -97,6 +97,8 @@ public:
|
||||||
void copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h);
|
void copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h);
|
||||||
void showOverlay();
|
void showOverlay();
|
||||||
void hideOverlay();
|
void hideOverlay();
|
||||||
|
Graphics::Surface *lockScreen();
|
||||||
|
void unlockScreen();
|
||||||
|
|
||||||
// GUI and action stuff
|
// GUI and action stuff
|
||||||
void swap_panel_visibility();
|
void swap_panel_visibility();
|
||||||
|
@ -189,6 +191,7 @@ private:
|
||||||
bool _panelInitialized; // only initialize the toolbar once
|
bool _panelInitialized; // only initialize the toolbar once
|
||||||
|
|
||||||
bool _monkeyKeyboard; // forced keyboard for Monkey Island copy protection
|
bool _monkeyKeyboard; // forced keyboard for Monkey Island copy protection
|
||||||
|
bool _unfilteredkeys; // discard key mapping temporarily (agi pred. dialog)
|
||||||
static bool _soundMaster; // turn off sound after all calculations
|
static bool _soundMaster; // turn off sound after all calculations
|
||||||
// static since needed by the SDL callback
|
// static since needed by the SDL callback
|
||||||
int _orientationLandscape; // current orientation
|
int _orientationLandscape; // current orientation
|
||||||
|
|
|
@ -183,7 +183,7 @@ protected:
|
||||||
int _zlibErr;
|
int _zlibErr;
|
||||||
|
|
||||||
void processData(int flushType) {
|
void processData(int flushType) {
|
||||||
// This function is called by both write() and finalize.
|
// This function is called by both write() and finalize().
|
||||||
while (_zlibErr == Z_OK && (_stream.avail_in || flushType == Z_FINISH)) {
|
while (_zlibErr == Z_OK && (_stream.avail_in || flushType == Z_FINISH)) {
|
||||||
if (_stream.avail_out == 0) {
|
if (_stream.avail_out == 0) {
|
||||||
if (_wrapped->write(_buf, BUFSIZE) != BUFSIZE) {
|
if (_wrapped->write(_buf, BUFSIZE) != BUFSIZE) {
|
||||||
|
@ -218,6 +218,8 @@ public:
|
||||||
|
|
||||||
_stream.next_out = _buf;
|
_stream.next_out = _buf;
|
||||||
_stream.avail_out = BUFSIZE;
|
_stream.avail_out = BUFSIZE;
|
||||||
|
_stream.avail_in = 0;
|
||||||
|
_stream.next_in = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
~CompressedOutSaveFile() {
|
~CompressedOutSaveFile() {
|
||||||
|
|
|
@ -659,7 +659,23 @@ bool processSettings(Common::String &command, Common::StringMap &settings) {
|
||||||
if (!command.empty()) {
|
if (!command.empty()) {
|
||||||
GameDescriptor gd = Base::findGame(command);
|
GameDescriptor gd = Base::findGame(command);
|
||||||
if (ConfMan.hasGameDomain(command) || !gd.gameid().empty()) {
|
if (ConfMan.hasGameDomain(command) || !gd.gameid().empty()) {
|
||||||
|
bool idCameFromCommandLine = false;
|
||||||
|
|
||||||
|
// WORKAROUND: Fix for bug #1719463: "DETECTOR: Launching
|
||||||
|
// undefined target adds launcher entry"
|
||||||
|
//
|
||||||
|
// We designate gameids which come strictly from command line
|
||||||
|
// so AdvancedDetector will not save config file with invalid
|
||||||
|
// gameid in case target autoupgrade was performed
|
||||||
|
if (!ConfMan.hasGameDomain(command)) {
|
||||||
|
idCameFromCommandLine = true;
|
||||||
|
}
|
||||||
|
|
||||||
ConfMan.setActiveDomain(command);
|
ConfMan.setActiveDomain(command);
|
||||||
|
|
||||||
|
if (idCameFromCommandLine)
|
||||||
|
ConfMan.set("id_came_from_command_line", "1");
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
usage("Unrecognized game target '%s'", command.c_str());
|
usage("Unrecognized game target '%s'", command.c_str());
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,16 @@
|
||||||
#include "base/game.h"
|
#include "base/game.h"
|
||||||
#include "base/plugins.h"
|
#include "base/plugins.h"
|
||||||
|
|
||||||
|
const PlainGameDescriptor *findPlainGameDescriptor(const char *gameid, const PlainGameDescriptor *list) {
|
||||||
|
const PlainGameDescriptor *g = list;
|
||||||
|
while (g->gameid) {
|
||||||
|
if (0 == scumm_stricmp(gameid, g->gameid))
|
||||||
|
break;
|
||||||
|
g++;
|
||||||
|
}
|
||||||
|
return g;
|
||||||
|
}
|
||||||
|
|
||||||
void GameDescriptor::updateDesc(const char *extra) {
|
void GameDescriptor::updateDesc(const char *extra) {
|
||||||
// TODO: The format used here (LANG/PLATFORM/EXTRA) is not set in stone.
|
// TODO: The format used here (LANG/PLATFORM/EXTRA) is not set in stone.
|
||||||
// We may want to change the order (PLATFORM/EXTRA/LANG, anybody?), or
|
// We may want to change the order (PLATFORM/EXTRA/LANG, anybody?), or
|
||||||
|
@ -58,7 +68,7 @@ void GameDescriptor::updateDesc(const char *extra) {
|
||||||
|
|
||||||
namespace Base {
|
namespace Base {
|
||||||
|
|
||||||
// TODO: Find a better place for this function.
|
// TODO: Find a better name & place for this function.
|
||||||
GameDescriptor findGame(const Common::String &gameName, const Plugin **plugin) {
|
GameDescriptor findGame(const Common::String &gameName, const Plugin **plugin) {
|
||||||
// Find the GameDescriptor for this target
|
// Find the GameDescriptor for this target
|
||||||
const PluginList &plugins = PluginManager::instance().getPlugins();
|
const PluginList &plugins = PluginManager::instance().getPlugins();
|
||||||
|
|
24
base/game.h
24
base/game.h
|
@ -31,11 +31,31 @@
|
||||||
#include "common/array.h"
|
#include "common/array.h"
|
||||||
#include "common/hash-str.h"
|
#include "common/hash-str.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A simple structure used to map gameids (like "monkey", "sword1", ...) to
|
||||||
|
* nice human readable and descriptive game titles (like "The Secret of Monkey Island").
|
||||||
|
* This is a plain struct to make it possible to declare NULL-terminated C arrays
|
||||||
|
* consisting of PlainGameDescriptors.
|
||||||
|
*/
|
||||||
struct PlainGameDescriptor {
|
struct PlainGameDescriptor {
|
||||||
const char *gameid;
|
const char *gameid;
|
||||||
const char *description; // TODO: Rename this to "title" or so
|
const char *description;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Given a list of PlainGameDescriptors, returns the first PlainGameDescriptor
|
||||||
|
* matching the given gameid. If not match is found return 0.
|
||||||
|
* The end of the list marked by a PlainGameDescriptor with gameid equal to 0.
|
||||||
|
*/
|
||||||
|
const PlainGameDescriptor *findPlainGameDescriptor(const char *gameid, const PlainGameDescriptor *list);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A hashmap describing details about a given game. In a sense this is a refined
|
||||||
|
* version of PlainGameDescriptor, as it also contains a gameid and a description string.
|
||||||
|
* But in addition, platform and language settings, as well as arbitrary other settings,
|
||||||
|
* can be contained in a GameDescriptor.
|
||||||
|
* This is an essential part of the glue between the game engines and the launcher code.
|
||||||
|
*/
|
||||||
class GameDescriptor : public Common::StringMap {
|
class GameDescriptor : public Common::StringMap {
|
||||||
public:
|
public:
|
||||||
GameDescriptor() {
|
GameDescriptor() {
|
||||||
|
@ -90,7 +110,7 @@ class Plugin;
|
||||||
|
|
||||||
namespace Base {
|
namespace Base {
|
||||||
|
|
||||||
// TODO: Find a better place for this function.
|
// TODO: Find a better name & place for this function.
|
||||||
GameDescriptor findGame(const Common::String &gameName, const Plugin **plugin = NULL);
|
GameDescriptor findGame(const Common::String &gameName, const Plugin **plugin = NULL);
|
||||||
|
|
||||||
} // End of namespace Base
|
} // End of namespace Base
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
#define SCUMMVM_VERSION "0.10.0svn"
|
#define SCUMMVM_VERSION "0.11.0svn"
|
||||||
|
|
|
@ -82,7 +82,7 @@ static bool launcherDialog(OSystem &system) {
|
||||||
return (dlg.runModal() != -1);
|
return (dlg.runModal() != -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const Plugin *detectMain() {
|
static const Plugin *detectPlugin() {
|
||||||
const Plugin *plugin = 0;
|
const Plugin *plugin = 0;
|
||||||
|
|
||||||
// Make sure the gameid is set in the config manager, and that it is lowercase.
|
// Make sure the gameid is set in the config manager, and that it is lowercase.
|
||||||
|
@ -109,6 +109,7 @@ static const Plugin *detectMain() {
|
||||||
return plugin;
|
return plugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: specify the possible return values here
|
||||||
static int runGame(const Plugin *plugin, OSystem &system, const Common::String &edebuglevels) {
|
static int runGame(const Plugin *plugin, OSystem &system, const Common::String &edebuglevels) {
|
||||||
Common::String gameDataPath(ConfMan.get("path"));
|
Common::String gameDataPath(ConfMan.get("path"));
|
||||||
if (gameDataPath.empty()) {
|
if (gameDataPath.empty()) {
|
||||||
|
@ -121,8 +122,11 @@ static int runGame(const Plugin *plugin, OSystem &system, const Common::String &
|
||||||
ConfMan.set("path", gameDataPath, Common::ConfigManager::kTransientDomain);
|
ConfMan.set("path", gameDataPath, Common::ConfigManager::kTransientDomain);
|
||||||
}
|
}
|
||||||
|
|
||||||
// We add it here, so MD5-based detection will be able to
|
// We add the game "path" to the file search path via File::addDefaultDirectory(),
|
||||||
// read mixed case files
|
// so that MD5-based detection will be able to properly find files with mixed case
|
||||||
|
// filenames.
|
||||||
|
// FIXME/TODO: Fingolfin still doesn't like this; if those MD5-based detectors used
|
||||||
|
// FSNodes instead of File::open, they wouldn't have to do this.
|
||||||
Common::String path;
|
Common::String path;
|
||||||
if (ConfMan.hasKey("path")) {
|
if (ConfMan.hasKey("path")) {
|
||||||
path = ConfMan.get("path");
|
path = ConfMan.get("path");
|
||||||
|
@ -190,18 +194,26 @@ static int runGame(const Plugin *plugin, OSystem &system, const Common::String &
|
||||||
if (ConfMan.hasKey("extrapath", Common::ConfigManager::kApplicationDomain))
|
if (ConfMan.hasKey("extrapath", Common::ConfigManager::kApplicationDomain))
|
||||||
Common::File::addDefaultDirectoryRecursive(ConfMan.get("extrapath", Common::ConfigManager::kApplicationDomain));
|
Common::File::addDefaultDirectoryRecursive(ConfMan.get("extrapath", Common::ConfigManager::kApplicationDomain));
|
||||||
|
|
||||||
|
#ifdef DATA_PATH
|
||||||
|
// Add the global DATA_PATH to the directory search list
|
||||||
|
Common::File::addDefaultDirectoryRecursive(DATA_PATH);
|
||||||
|
#endif
|
||||||
|
|
||||||
// On creation the engine should've set up all debug levels so we can use
|
// On creation the engine should've set up all debug levels so we can use
|
||||||
// the command line arugments here
|
// the command line arugments here
|
||||||
Common::enableSpecialDebugLevelList(edebuglevels);
|
Common::enableSpecialDebugLevelList(edebuglevels);
|
||||||
|
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
// Init the engine (this might change the screen parameters
|
// Init the engine (this might change the screen parameters)
|
||||||
|
// TODO: We should specify what return values
|
||||||
result = engine->init();
|
result = engine->init();
|
||||||
|
|
||||||
// Run the game engine if the initialization was successful.
|
// Run the game engine if the initialization was successful.
|
||||||
if (result == 0) {
|
if (result == 0) {
|
||||||
result = engine->go();
|
result = engine->go();
|
||||||
|
} else {
|
||||||
|
// TODO: Set an error flag, notify user about the problem
|
||||||
}
|
}
|
||||||
|
|
||||||
// We clear all debug levels again even though the engine should do it
|
// We clear all debug levels again even though the engine should do it
|
||||||
|
@ -213,7 +225,7 @@ static int runGame(const Plugin *plugin, OSystem &system, const Common::String &
|
||||||
// Reset the file/directory mappings
|
// Reset the file/directory mappings
|
||||||
Common::File::resetDefaultDirectories();
|
Common::File::resetDefaultDirectories();
|
||||||
|
|
||||||
return result;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -289,14 +301,18 @@ extern "C" int scummvm_main(int argc, char *argv[]) {
|
||||||
// work as well as it should. In theory everything should be destroyed
|
// work as well as it should. In theory everything should be destroyed
|
||||||
// cleanly, so this is now enabled to encourage people to fix bits :)
|
// cleanly, so this is now enabled to encourage people to fix bits :)
|
||||||
while (0 != ConfMan.getActiveDomain()) {
|
while (0 != ConfMan.getActiveDomain()) {
|
||||||
// Verify the given game name is a valid supported game
|
// Try to find a plugin which feels responsible for the specified game.
|
||||||
const Plugin *plugin = detectMain();
|
const Plugin *plugin = detectPlugin();
|
||||||
if (plugin) {
|
if (plugin) {
|
||||||
// Unload all plugins not needed for this game,
|
// Unload all plugins not needed for this game,
|
||||||
// to save memory
|
// to save memory
|
||||||
PluginManager::instance().unloadPluginsExcept(plugin);
|
PluginManager::instance().unloadPluginsExcept(plugin);
|
||||||
|
|
||||||
|
// Try to run the game
|
||||||
int result = runGame(plugin, system, specialDebug);
|
int result = runGame(plugin, system, specialDebug);
|
||||||
|
// TODO: We should keep running if starting the selected game failed
|
||||||
|
// (so instead of just quitting, show a nice error dialog to the
|
||||||
|
// user and let him pick another game).
|
||||||
if (result == 0)
|
if (result == 0)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -309,6 +325,9 @@ extern "C" int scummvm_main(int argc, char *argv[]) {
|
||||||
|
|
||||||
// PluginManager::instance().unloadPlugins();
|
// PluginManager::instance().unloadPlugins();
|
||||||
PluginManager::instance().loadPlugins();
|
PluginManager::instance().loadPlugins();
|
||||||
|
} else {
|
||||||
|
GUI::MessageDialog alert("Could not find any engine capable of running the selected game!");
|
||||||
|
alert.runModal();
|
||||||
}
|
}
|
||||||
|
|
||||||
launcherDialog(system);
|
launcherDialog(system);
|
||||||
|
|
|
@ -87,7 +87,12 @@ static void upgradeTargetIfNecessary(const Common::ADParams ¶ms) {
|
||||||
ConfMan.set("platform", Common::getPlatformCode(o->platform));
|
ConfMan.set("platform", Common::getPlatformCode(o->platform));
|
||||||
|
|
||||||
warning("Target upgraded from %s to %s", o->from, o->to);
|
warning("Target upgraded from %s to %s", o->from, o->to);
|
||||||
ConfMan.flushToDisk();
|
|
||||||
|
if (ConfMan.hasKey("id_came_from_command_line")) {
|
||||||
|
warning("Target came from command line. Skipping save");
|
||||||
|
} else {
|
||||||
|
ConfMan.flushToDisk();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -95,25 +100,31 @@ static void upgradeTargetIfNecessary(const Common::ADParams ¶ms) {
|
||||||
|
|
||||||
GameDescriptor findGameID(
|
GameDescriptor findGameID(
|
||||||
const char *gameid,
|
const char *gameid,
|
||||||
const Common::ADParams ¶ms
|
const PlainGameDescriptor *list,
|
||||||
|
const Common::ADObsoleteGameID *obsoleteList
|
||||||
) {
|
) {
|
||||||
const PlainGameDescriptor *g = params.list;
|
// First search the list of supported game IDs for a match.
|
||||||
while (g->gameid) {
|
const PlainGameDescriptor *g = findPlainGameDescriptor(gameid, list);
|
||||||
if (0 == scumm_stricmp(gameid, g->gameid))
|
if (g)
|
||||||
return GameDescriptor(*g);
|
return GameDescriptor(*g);
|
||||||
g++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (params.obsoleteList != 0) {
|
// If we didn't find the gameid in the main list, check if it
|
||||||
const Common::ADObsoleteGameID *o = params.obsoleteList;
|
// is an obsolete game id.
|
||||||
|
if (obsoleteList != 0) {
|
||||||
|
const Common::ADObsoleteGameID *o = obsoleteList;
|
||||||
while (o->from) {
|
while (o->from) {
|
||||||
if (0 == scumm_stricmp(gameid, o->from)) {
|
if (0 == scumm_stricmp(gameid, o->from)) {
|
||||||
return GameDescriptor(gameid, "Obsolete game ID");
|
g = findPlainGameDescriptor(o->to, list);
|
||||||
|
if (g && g->description)
|
||||||
|
return GameDescriptor(gameid, "Obsolete game ID (" + Common::String(g->description) + ")");
|
||||||
|
else
|
||||||
|
return GameDescriptor(gameid, "Obsolete game ID");
|
||||||
}
|
}
|
||||||
o++;
|
o++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// No match found
|
||||||
return GameDescriptor();
|
return GameDescriptor();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -131,6 +142,24 @@ static GameDescriptor toGameDescriptor(const ADGameDescription &g, const PlainGa
|
||||||
return gd;
|
return gd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Almost identical to the toGameDescriptor function that takes a ADGameDescription and PlainGameDescriptor.
|
||||||
|
// Just a little fine tuning about accessing variables.
|
||||||
|
// Used because of fallback detection and the dynamic string content it needs.
|
||||||
|
static GameDescriptor toGameDescriptor(const EncapsulatedADGameDesc &g, const PlainGameDescriptor *sg) {
|
||||||
|
const char *title = 0;
|
||||||
|
|
||||||
|
while (sg->gameid) {
|
||||||
|
if (!scumm_stricmp(g.getGameID(), sg->gameid))
|
||||||
|
title = sg->description;
|
||||||
|
sg++;
|
||||||
|
}
|
||||||
|
|
||||||
|
assert(g.realDesc);
|
||||||
|
GameDescriptor gd(g.getGameID(), title, g.realDesc->language, g.realDesc->platform);
|
||||||
|
gd.updateDesc(g.getExtra());
|
||||||
|
return gd;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generate a preferred target value as
|
* Generate a preferred target value as
|
||||||
* GAMEID-PLAFORM-LANG
|
* GAMEID-PLAFORM-LANG
|
||||||
|
@ -155,38 +184,49 @@ static String generatePreferredTarget(const String &id, const ADGameDescription
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void updateGameDescriptor(GameDescriptor &desc, const ADGameDescription *realDesc, const Common::ADParams ¶ms) {
|
||||||
|
if (params.singleid != NULL) {
|
||||||
|
desc["preferredtarget"] = desc["gameid"];
|
||||||
|
desc["gameid"] = params.singleid;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (params.flags & kADFlagAugmentPreferredTarget) {
|
||||||
|
if (!desc.contains("preferredtarget"))
|
||||||
|
desc["preferredtarget"] = desc["gameid"];
|
||||||
|
|
||||||
|
desc["preferredtarget"] = generatePreferredTarget(desc["preferredtarget"], realDesc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
GameList detectAllGames(
|
GameList detectAllGames(
|
||||||
const FSList &fslist,
|
const FSList &fslist,
|
||||||
const Common::ADParams ¶ms
|
const Common::ADParams ¶ms
|
||||||
) {
|
) {
|
||||||
ADGameDescList matches = detectGame(&fslist, params, Common::UNK_LANG, Common::kPlatformUnknown);
|
ADGameDescList matches = detectGame(&fslist, params, Common::UNK_LANG, Common::kPlatformUnknown);
|
||||||
|
|
||||||
GameList detectedGames;
|
GameList detectedGames;
|
||||||
for (uint i = 0; i < matches.size(); i++) {
|
|
||||||
|
// Use fallback detector if there were no matches by other means
|
||||||
|
if (matches.empty() && params.fallbackDetectFunc != NULL) {
|
||||||
|
EncapsulatedADGameDesc fallbackDesc = (*params.fallbackDetectFunc)(&fslist);
|
||||||
|
if (fallbackDesc.realDesc != 0) {
|
||||||
|
GameDescriptor desc(toGameDescriptor(fallbackDesc, params.list));
|
||||||
|
updateGameDescriptor(desc, fallbackDesc.realDesc, params);
|
||||||
|
detectedGames.push_back(desc);
|
||||||
|
}
|
||||||
|
} else for (uint i = 0; i < matches.size(); i++) { // Otherwise use the found matches
|
||||||
GameDescriptor desc(toGameDescriptor(*matches[i], params.list));
|
GameDescriptor desc(toGameDescriptor(*matches[i], params.list));
|
||||||
|
updateGameDescriptor(desc, matches[i], params);
|
||||||
if (params.singleid != NULL) {
|
|
||||||
desc["preferredtarget"] = desc["gameid"];
|
|
||||||
desc["gameid"] = params.singleid;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (params.flags & kADFlagAugmentPreferredTarget) {
|
|
||||||
if (!desc.contains("preferredtarget"))
|
|
||||||
desc["preferredtarget"] = desc["gameid"];
|
|
||||||
|
|
||||||
desc["preferredtarget"] = generatePreferredTarget(desc["preferredtarget"], matches[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
detectedGames.push_back(desc);
|
detectedGames.push_back(desc);
|
||||||
}
|
}
|
||||||
|
|
||||||
return detectedGames;
|
return detectedGames;
|
||||||
}
|
}
|
||||||
|
|
||||||
const ADGameDescription *detectBestMatchingGame(
|
EncapsulatedADGameDesc detectBestMatchingGame(
|
||||||
const Common::ADParams ¶ms
|
const Common::ADParams ¶ms
|
||||||
) {
|
) {
|
||||||
const ADGameDescription *agdDesc = 0;
|
const ADGameDescription *agdDesc = 0;
|
||||||
|
EncapsulatedADGameDesc result;
|
||||||
Common::Language language = Common::UNK_LANG;
|
Common::Language language = Common::UNK_LANG;
|
||||||
Common::Platform platform = Common::kPlatformUnknown;
|
Common::Platform platform = Common::kPlatformUnknown;
|
||||||
|
|
||||||
|
@ -210,11 +250,20 @@ const ADGameDescription *detectBestMatchingGame(
|
||||||
agdDesc = matches[0];
|
agdDesc = matches[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (agdDesc != 0) {
|
if (agdDesc != 0) { // Check if we found a match without fallback detection
|
||||||
debug(2, "Running %s", toGameDescriptor(*agdDesc, params.list).description().c_str());
|
result = EncapsulatedADGameDesc(agdDesc);
|
||||||
|
} else if (params.fallbackDetectFunc != NULL) { // Use fallback detector if there were no matches by other means
|
||||||
|
EncapsulatedADGameDesc fallbackDesc = (*params.fallbackDetectFunc)(NULL);
|
||||||
|
if (fallbackDesc.realDesc != 0 && (params.singleid != NULL || fallbackDesc.getGameID() == gameid)) {
|
||||||
|
result = fallbackDesc; // Found a fallback match
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return agdDesc;
|
if (result.realDesc != 0) {
|
||||||
|
debug(2, "Running %s", toGameDescriptor(result, params.list).description().c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
PluginError detectGameForEngineCreation(
|
PluginError detectGameForEngineCreation(
|
||||||
|
@ -243,6 +292,14 @@ PluginError detectGameForEngineCreation(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Use fallback detector if there were no matches by other means
|
||||||
|
if (params.fallbackDetectFunc != NULL) {
|
||||||
|
EncapsulatedADGameDesc fallbackDesc = (*params.fallbackDetectFunc)(&fslist);
|
||||||
|
if (fallbackDesc.realDesc != 0 && (params.singleid != NULL || fallbackDesc.getGameID() == gameid)) {
|
||||||
|
return kNoError;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return kNoGameDataFoundError;
|
return kNoGameDataFoundError;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -281,6 +338,9 @@ static ADGameDescList detectGame(const FSList *fslist, const Common::ADParams &p
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO/FIXME: Fingolfin says: It's not good that we have two different code paths here,
|
||||||
|
// one using a FSList, one using File::open, as that will lead to discrepancies and subtle
|
||||||
|
// problems caused by those.
|
||||||
if (fslist != 0) {
|
if (fslist != 0) {
|
||||||
// Get the information of the existing files
|
// Get the information of the existing files
|
||||||
for (FSList::const_iterator file = fslist->begin(); file != fslist->end(); ++file) {
|
for (FSList::const_iterator file = fslist->begin(); file != fslist->end(); ++file) {
|
||||||
|
@ -493,11 +553,6 @@ static ADGameDescList detectGame(const FSList *fslist, const Common::ADParams &p
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we still haven't got a match, try to use the fallback callback :-)
|
|
||||||
if (matched.empty() && params.fallbackDetectFunc != 0) {
|
|
||||||
matched = (*params.fallbackDetectFunc)(fslist);
|
|
||||||
}
|
|
||||||
|
|
||||||
return matched;
|
return matched;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -63,6 +63,29 @@ struct ADGameDescription {
|
||||||
uint32 flags;
|
uint32 flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Encapsulates ADGameDescription and makes gameid and extra strings dynamic.
|
||||||
|
* Used in fallback detection when dynamically creating string content.
|
||||||
|
*/
|
||||||
|
struct EncapsulatedADGameDesc {
|
||||||
|
Common::String gameid;
|
||||||
|
Common::String extra;
|
||||||
|
const ADGameDescription *realDesc;
|
||||||
|
|
||||||
|
// Constructor for the EncapsulatedADGameDesc
|
||||||
|
EncapsulatedADGameDesc() : realDesc(0) {}
|
||||||
|
EncapsulatedADGameDesc(const ADGameDescription *paramRealDesc,
|
||||||
|
Common::String paramGameID = Common::String(""),
|
||||||
|
Common::String paramExtra = Common::String(""))
|
||||||
|
: realDesc(paramRealDesc), gameid(paramGameID), extra(paramExtra) {
|
||||||
|
assert(paramRealDesc != NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Functions for getting the correct gameid and extra values from the struct
|
||||||
|
const char *getGameID() const { return (gameid.empty() && realDesc != 0) ? realDesc->gameid : gameid.c_str(); }
|
||||||
|
const char *getExtra() const { return (extra.empty() && realDesc != 0) ? realDesc->extra : extra.c_str(); }
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A list of pointers to ADGameDescription structs (or subclasses thereof).
|
* A list of pointers to ADGameDescription structs (or subclasses thereof).
|
||||||
*/
|
*/
|
||||||
|
@ -177,7 +200,7 @@ struct ADParams {
|
||||||
*
|
*
|
||||||
* @todo
|
* @todo
|
||||||
*/
|
*/
|
||||||
ADGameDescList (*fallbackDetectFunc)(const FSList *fslist);
|
EncapsulatedADGameDesc (*fallbackDetectFunc)(const FSList *fslist);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A bitmask of flags which can be used to configure the behavior
|
* A bitmask of flags which can be used to configure the behavior
|
||||||
|
@ -201,13 +224,17 @@ GameList gameIDList(const Common::ADParams ¶ms);
|
||||||
* 'gameid' in there. If a match is found, returns a GameDescriptor
|
* 'gameid' in there. If a match is found, returns a GameDescriptor
|
||||||
* with gameid and description set.
|
* with gameid and description set.
|
||||||
*/
|
*/
|
||||||
GameDescriptor findGameID(const char *gameid, const Common::ADParams ¶ms);
|
GameDescriptor findGameID(
|
||||||
|
const char *gameid,
|
||||||
|
const PlainGameDescriptor *list,
|
||||||
|
const Common::ADObsoleteGameID *obsoleteList = 0
|
||||||
|
);
|
||||||
|
|
||||||
// FIXME/TODO: Rename this function to something more sensible.
|
// FIXME/TODO: Rename this function to something more sensible.
|
||||||
GameList detectAllGames(const FSList &fslist, const Common::ADParams ¶ms);
|
GameList detectAllGames(const FSList &fslist, const Common::ADParams ¶ms);
|
||||||
|
|
||||||
// FIXME/TODO: Rename this function to something more sensible.
|
// FIXME/TODO: Rename this function to something more sensible.
|
||||||
const ADGameDescription *detectBestMatchingGame(const Common::ADParams ¶ms);
|
EncapsulatedADGameDesc detectBestMatchingGame(const Common::ADParams ¶ms);
|
||||||
|
|
||||||
// FIXME/TODO: Rename this function to something more sensible.
|
// FIXME/TODO: Rename this function to something more sensible.
|
||||||
// Only used by ADVANCED_DETECTOR_DEFINE_PLUGIN_WITH_FUNC
|
// Only used by ADVANCED_DETECTOR_DEFINE_PLUGIN_WITH_FUNC
|
||||||
|
@ -230,7 +257,7 @@ PluginError detectGameForEngineCreation(const Common::ADParams ¶ms);
|
||||||
return Common::AdvancedDetector::gameIDList(params); \
|
return Common::AdvancedDetector::gameIDList(params); \
|
||||||
} \
|
} \
|
||||||
GameDescriptor Engine_##engine##_findGameID(const char *gameid) { \
|
GameDescriptor Engine_##engine##_findGameID(const char *gameid) { \
|
||||||
return Common::AdvancedDetector::findGameID(gameid, params); \
|
return Common::AdvancedDetector::findGameID(gameid, params.list, params.obsoleteList); \
|
||||||
} \
|
} \
|
||||||
GameList Engine_##engine##_detectGames(const FSList &fslist) { \
|
GameList Engine_##engine##_detectGames(const FSList &fslist) { \
|
||||||
return Common::AdvancedDetector::detectAllGames(fslist, params); \
|
return Common::AdvancedDetector::detectAllGames(fslist, params); \
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue