Merged the FSNode branch with trunk r27031:27680

svn-id: r27681
This commit is contained in:
David Corrales 2007-06-23 18:51:33 +00:00
commit cacd7a28fd
358 changed files with 9066 additions and 46890 deletions

View file

@ -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
View file

@ -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

View file

@ -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)

View file

@ -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
View file

@ -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
View file

@ -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

View file

@ -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;

View file

@ -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

View file

@ -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);

View file

@ -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;

View file

@ -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

View file

@ -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() {

View file

@ -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);
}

View file

@ -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;

View file

@ -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();

View file

@ -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()

View file

@ -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);

View file

@ -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) {

View file

@ -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)

View file

@ -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

View file

@ -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();
} }

View file

@ -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;

View file

@ -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) {

View file

@ -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

View file

@ -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')) {

View file

@ -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();

View file

@ -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'`/

View file

@ -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:

View file

@ -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();

View file

@ -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) {

View file

@ -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) {

View file

@ -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();

View file

@ -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

View file

@ -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;

View file

@ -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)

View file

@ -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) {

View file

@ -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);
} }

View file

@ -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;

View file

@ -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] = {

View file

@ -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

View file

@ -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) {

View file

@ -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();

View file

@ -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 = '.';
} }

View file

@ -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);

View file

@ -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:

View file

@ -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

View file

@ -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

View file

@ -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;

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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//

View file

@ -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

View file

@ -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.

View file

@ -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//

View file

@ -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

View file

@ -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//

View file

@ -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//

View file

@ -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//

View file

@ -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//

View file

@ -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//

View file

@ -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//

View file

@ -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//

View file

@ -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//

View file

@ -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//

View file

@ -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//

View file

@ -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//

View file

@ -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//

View file

@ -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//

View file

@ -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//

View file

@ -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//

View file

@ -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//

View file

@ -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

View file

@ -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,

View file

@ -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;
} }

View file

@ -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:

View file

@ -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,

View file

@ -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:

View file

@ -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,

View file

@ -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);
} }

View file

@ -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;
} }
} }

View file

@ -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;
}; };
} }

View file

@ -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();

View file

@ -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:

View file

@ -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/
------------------------------------------------------------------------

View file

@ -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;

View file

@ -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

View file

@ -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() {

View file

@ -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());
} }

View file

@ -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();

View file

@ -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

View file

@ -1 +1 @@
#define SCUMMVM_VERSION "0.10.0svn" #define SCUMMVM_VERSION "0.11.0svn"

View file

@ -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);

View file

@ -87,7 +87,12 @@ static void upgradeTargetIfNecessary(const Common::ADParams &params) {
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 &params) {
GameDescriptor findGameID( GameDescriptor findGameID(
const char *gameid, const char *gameid,
const Common::ADParams &params 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 &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"], realDesc);
}
}
GameList detectAllGames( GameList detectAllGames(
const FSList &fslist, const FSList &fslist,
const Common::ADParams &params const Common::ADParams &params
) { ) {
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 &params const Common::ADParams &params
) { ) {
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;
} }

View file

@ -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 &params);
* '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 &params); 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 &params); GameList detectAllGames(const FSList &fslist, const Common::ADParams &params);
// FIXME/TODO: Rename this function to something more sensible. // FIXME/TODO: Rename this function to something more sensible.
const ADGameDescription *detectBestMatchingGame(const Common::ADParams &params); EncapsulatedADGameDesc detectBestMatchingGame(const Common::ADParams &params);
// 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 &params);
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