aboutsummaryrefslogtreecommitdiff
path: root/backends/platform
diff options
context:
space:
mode:
authorMax Horn2010-04-16 20:49:16 +0000
committerMax Horn2010-04-16 20:49:16 +0000
commitb191acf7cc3822f325ea4fac6b8db7aa30342dcd (patch)
treeeff668d2609786087b54ba435efae200cda0b8bd /backends/platform
parent17c0c846aaa5d2d1681566be0f7b5aa6ca57bbc6 (diff)
downloadscummvm-rg350-b191acf7cc3822f325ea4fac6b8db7aa30342dcd.tar.gz
scummvm-rg350-b191acf7cc3822f325ea4fac6b8db7aa30342dcd.tar.bz2
scummvm-rg350-b191acf7cc3822f325ea4fac6b8db7aa30342dcd.zip
DS: Merge changes from 1.1.0 branch into trunk
svn-id: r48677
Diffstat (limited to 'backends/platform')
-rw-r--r--backends/platform/ds/arm9/dist/readme_ds.txt124
-rw-r--r--backends/platform/ds/arm9/source/dsmain.cpp106
2 files changed, 128 insertions, 102 deletions
diff --git a/backends/platform/ds/arm9/dist/readme_ds.txt b/backends/platform/ds/arm9/dist/readme_ds.txt
index 97b5ed74a1..191b358f78 100644
--- a/backends/platform/ds/arm9/dist/readme_ds.txt
+++ b/backends/platform/ds/arm9/dist/readme_ds.txt
@@ -41,6 +41,15 @@ Visit the main ScummVM website <http://www.scummvm.org>
What's New?
------------------------------------------------------------------------
+ScummVM DS 1.1.0
+
+ * New games are supported in this stable build: Return to Zork, Rodney's
+ Funscreen, Manhole, Leather Goddess of Phobos 2, Cruise for a Corpse.
+
+ScummVM DS 1.0.0
+
+ * No changes!
+
ScummVM DS 1.0.0 RC1
* Gamma correction feature to improve brightness level of game on the
@@ -226,25 +235,25 @@ Here is what you need to do:
If your copy of ScummVM DS has been successfully patched, you will get a
message on the top screen that looks like this:
- DLDI Device:
- GBA Movie Player (Compact Flash)
+ DLDI Device:
+ GBA Movie Player (Compact Flash)
The message should show the name of your card reader. If it is wrong,
you have used the wrong DLDI file.
If you haven't patched your .nds file, you will get the following message
- DLDI Driver not patched!
- DLDI Initialise failed.
+ DLDI Driver not patched!
+ DLDI Initialise failed.
In this case, you've made a mistake following the above instructions, or
have patched the wrong file.
You may also see the following message:
- DLDI Device:
- GBA Movie Player (Compact Flash)
- DLDI Initialise failed.
+ DLDI Device:
+ GBA Movie Player (Compact Flash)
+ DLDI Initialise failed.
In this case, the driver did not start up correctly. The driver is
probably broken, or you've used the wrong one for your card reader.
@@ -310,7 +319,7 @@ CANNOT DO THIS.
------------------------------------------------------------------------
I'm glad you asked. Here is a list of the compatible games in version
-1.0.0 RC1. Demo versions of the games listed should work too.
+1.1.0. Demo versions of the games listed should work too.
Flight of the Amazon Queen, Beneath a Steel Sky, and Lure of the
Temptress have generously been released as freeware by the original
@@ -342,9 +351,9 @@ Monkey Island 2: LeChuck's Revenge A
Indiana Jones and the Fate of Atlantis A
-Day of the Tentacle A
+Day of the Tentacle A
-Sam & Max Hit the Road A Some slowdown in a few scenes
+Sam & Max Hit the Road A Some slowdown in a few scenes
when MP3 audio is enabled
Bear Stormin' (DOS) A
@@ -400,6 +409,16 @@ Lure of the Temptress G
Nippon Safes G
+Return to Zork I
+
+Leather Goddess of Phobos 2 I
+
+Manhole I
+
+Rodney's Funscreen I
+
+Cruise for a Corpse K
+
Full Throttle and The Dig can run on the DS using an external RAM pack
plugged into slot-2 (the GBA slot). To do this, download the special
@@ -456,7 +475,8 @@ with the DS pen, you can switch the input into one of three modes. Press
left on the D-pad to enable the left mouse button. Press right on the
D-pad to enable the right mouse button. Press up on the D-pad to enable
hover mode. In this mode, you won't click on anything, just hover the
-mouse cursor over it. This lets you pick out active objects in the scene.
+mouse cursor over it. This lets you pick out active objects in the
+scene.
An icon on the top screen will show you which mode you're in.
@@ -467,46 +487,48 @@ mode) will click the left or right mouse button.
There is an alternative method of control which doesn't require you to
change modes with the D-pad. Press 'Select' to bring up the DS options,
and choose 'Tap for left click, double tap for right click'. In this
-mode, you can quickly tap the screen to left click the mouse, and tap twice
-to right click the mouse.
+mode, you can quickly tap the screen to left click the mouse, and tap
+twice to right click the mouse.
Here is a complete list of controls in right-handed mode (the default
setting):
-Key Usage
-Pad Left Left mouse button
-Pad Right Right mouse button
-Pad Up Hover mouse (no mouse button)
-Pad Down Skip dialogue line (for some Lucasarts games), Show inventory
- (for Beneath a Steel Sky), Show active objects (for Simon the Sorceror)
-Start Pause/game menu (works in some games)
-Select DS Options
-B Skip cutscenes
-A Swap main screen and zoomed screen
-Y Show/Hide debug console
-X Show/Hide on-screen keyboard
-L + D-pad or L + Pen Scroll touch screen view
-L + B Zoom in
-L + A Zoom out
+Key Usage
+Pad Left Left mouse button
+Pad Right Right mouse button
+Pad Up Hover mouse (no mouse button)
+Pad Down Skip dialogue line (for some Lucasarts games),
+ Show inventory (for Beneath a Steel Sky), Show
+ active objects (for Simon the Sorceror)
+Start Pause/game menu (works in some games)
+Select DS Options
+B Skip cutscenes
+A Swap main screen and zoomed screen
+Y Show/Hide debug console
+X Show/Hide on-screen keyboard
+L + D-pad or L + Pen Scroll touch screen view
+L + B Zoom in
+L + A Zoom out
And here's left-handed mode:
-Key Usage
-Y Left mouse button
-A Right mouse button
-X Hover mouse (no mouse button)
-B Skip dialogue line (for some Lucasarts games), Show inventory (for
- Beneath a Steel Sky), Show active objects (for Simon the Sorceror)
-Start Pause/game menu (works in some games)
-Select DS Options
-D-pad down Skip cutscenes
-D-pad up Swap main screen and zoomed screen
-D-pad left Show/Hide debug console
-D-pad right Show/Hide on-screen keyboard
-R + D-pad or R + Pen Scroll touch screen view
-R + D-pad down Zoom in
-R + d-pad right Zoom out
+Key Usage
+Y Left mouse button
+A Right mouse button
+X Hover mouse (no mouse button)
+B Skip dialogue line (for some Lucasarts games),
+ Show inventory (for Beneath a Steel Sky), Show
+ active objects (for Simon the Sorceror)
+Start Pause/game menu (works in some games)
+Select DS Options
+D-pad down Skip cutscenes
+D-pad up Swap main screen and zoomed screen
+D-pad left Show/Hide debug console
+D-pad right Show/Hide on-screen keyboard
+R + D-pad or R + Pen Scroll touch screen view
+R + D-pad down Zoom in
+R + d-pad right Zoom out
@@ -779,11 +801,11 @@ This program was brought to you by caffiene, sugar, and late nights.
------------------------------------------------------------------------
If you have problems getting ScummVM to work on your hardware, please
-read the FAQ first. /Please/ don't ask me questions which are
-answered in the FAQ, I get many emails about this program each day, and
-I can't help the people who really need help if I'm answering the same
-question all the time which is already answered on this page. Other than
-that, feel free to post on the ScummVM DS forum <http://forums.scummvm.org>
+read the FAQ first. /Please/ don't ask me questions which are answered
+in the FAQ, I get many emails about this program each day, and I can't
+help the people who really need help if I'm answering the same question
+all the time which is already answered on this page. Other than that,
+feel free to post on the ScummVM DS forum <http://forums.scummvm.org>
for help. Please do your research first though. There is no way of
running this on an out-of-the box DS without extra hardware. Most of
these things are fairly inexpensive though.
@@ -819,14 +841,16 @@ libmad support by opening 'backends/platform/ds/arm9/makefile' and
commenting out the line which says USE_MAD = 1.
Then, enter the 'backends/platform/ds' folder and type:
-make SCUMM_BUILD=a
+
+ make SCUMM_BUILD=a
The executable nds file will build inside 'backends/platform/ds/arm9/SCUMMVM-A'.
For other builds, substitute the letters b - g in the above line.
To build everything, type:
-make allbuildssafe
+
+ make allbuildssafe
diff --git a/backends/platform/ds/arm9/source/dsmain.cpp b/backends/platform/ds/arm9/source/dsmain.cpp
index f93dcc890e..1e9986e4e9 100644
--- a/backends/platform/ds/arm9/source/dsmain.cpp
+++ b/backends/platform/ds/arm9/source/dsmain.cpp
@@ -349,19 +349,19 @@ gameListType* currentGame = NULL;
// Stylus
#define ABS(x) ((x)>0?(x):-(x))
-bool penDown;
-bool penHeld;
-bool penReleased;
-bool penDownLastFrame;
-s32 penX, penY;
-s32 penDownX, penDownY;
-int keysDownSaved;
-int keysReleasedSaved;
-int keysChangedSaved;
-
-bool penDownSaved;
-bool penReleasedSaved;
-int penDownFrames;
+bool penDown = FALSE;
+bool penHeld = FALSE;
+bool penReleased = FALSE;
+bool penDownLastFrame = FALSE;
+s32 penX = 0, penY = 0;
+s32 penDownX = 0, penDownY = 0;
+int keysDownSaved = 0;
+int keysReleasedSaved = 0;
+int keysChangedSaved = 0;
+
+bool penDownSaved = FALSE;
+bool penReleasedSaved = FALSE;
+int penDownFrames = 0;
int touchXOffset = 0;
int touchYOffset = 0;
@@ -580,12 +580,12 @@ void initGame() {
//strcpy(gameName, ConfMan.getActiveDomain().c_str());
if (currentGame == NULL) {
-
+
strcpy(gameName, ConfMan.get("gameid").c_str());
// consolePrintf("\n\n\n\nCurrent game: '%s' %d\n", gameName, gameName[0]);
-
+
currentGame = &gameList[0]; // Default game
-
+
for (int r = 0; r < NUM_SUPPORTED_GAMES; r++) {
if (!stricmp(gameName, gameList[r].gameId)) {
currentGame = &gameList[r];
@@ -1353,33 +1353,33 @@ void doScreenTapMode(OSystem_DS* system)
}
if (!(getKeysHeld() & (KEY_L | KEY_R))) {
-
+
if (getKeysDown() & KEY_LEFT) {
event.type = Common::EVENT_LBUTTONDOWN;
event.mouse = Common::Point(getPenX(), getPenY());
system->addEvent(event);
}
-
+
if (getKeysReleased() & KEY_LEFT) {
event.type = Common::EVENT_LBUTTONUP;
event.mouse = Common::Point(getPenX(), getPenY());
system->addEvent(event);
}
-
-
+
+
if (getKeysDown() & KEY_RIGHT) {
event.type = Common::EVENT_RBUTTONDOWN;
event.mouse = Common::Point(getPenX(), getPenY());
system->addEvent(event);
}
-
+
if (getKeysReleased() & KEY_RIGHT) {
event.type = Common::EVENT_RBUTTONUP;
event.mouse = Common::Point(getPenX(), getPenY());
system->addEvent(event);
}
}
-
+
event.type = Common::EVENT_MOUSEMOVE;
event.mouse = Common::Point(getPenX(), getPenY());
system->addEvent(event);
@@ -1403,18 +1403,21 @@ void doButtonSelectMode(OSystem_DS* system)
if (getPenReleased() && (leftButtonDown || rightButtonDown)) {
if (leftButtonDown) {
event.type = Common::EVENT_LBUTTONUP;
- } else {
+ leftButtonDown = false;
+ event.mouse = Common::Point(getPenX(), getPenY());
+ system->addEvent(event);
+ } else if (rightButtonDown) {
event.type = Common::EVENT_RBUTTONUP;
+ rightButtonDown = false;
+ event.mouse = Common::Point(getPenX(), getPenY());
+ system->addEvent(event);
}
-
- event.mouse = Common::Point(getPenX(), getPenY());
- system->addEvent(event);
}
if ((mouseMode != MOUSE_HOVER) || (!displayModeIs8Bit)) {
if (getPenDown() && (!(getKeysHeld() & KEY_L)) && (!(getKeysHeld() & KEY_R))) {
- if ((mouseMode == MOUSE_LEFT) || (!displayModeIs8Bit)) {
+ if (mouseMode == MOUSE_LEFT) {
event.type = Common::EVENT_LBUTTONDOWN;
leftButtonDown = true;
} else {
@@ -1462,8 +1465,7 @@ void doButtonSelectMode(OSystem_DS* system)
mouseMode = MOUSE_LEFT;
}
- if (rightButtonDown)
- {
+ if (rightButtonDown) {
Common::Event event;
event.mouse = Common::Point(getPenX(), getPenY());
event.type = Common::EVENT_RBUTTONUP;
@@ -1642,26 +1644,26 @@ void addEventsToQueue() {
}
- static int selectHoldCount = 0;
- static const int SELECT_HOLD_TIME = 60;
-
- if ((getKeysHeld() & KEY_SELECT)) {
- selectHoldCount++;
+ static int selectTimeDown = -1;
+ static const int SELECT_HOLD_TIME = 1000;
- if (selectHoldCount == SELECT_HOLD_TIME) {
- // Hold select down for one second - show GMM
- g_engine->openMainMenuDialog();
- }
- } else {
- selectHoldCount = 0;
+ if (getKeysDown() & KEY_SELECT) {
+ selectTimeDown = getMillis();
}
+ if (selectTimeDown != -1) {
+ if (getKeysHeld() & KEY_SELECT) {
+ if (getMillis() - selectTimeDown >= SELECT_HOLD_TIME) {
+ // Hold select down for one second - show GMM
+ g_engine->openMainMenuDialog();
+ }
+ }
-
- if (getKeysReleased() & KEY_SELECT) {
- if (selectHoldCount < SELECT_HOLD_TIME) {
- // Just pressed select - show DS options screen
- showOptionsDialog();
+ if (getKeysReleased() & KEY_SELECT) {
+ if (getMillis() - selectTimeDown < SELECT_HOLD_TIME) {
+ // Just pressed select - show DS options screen
+ showOptionsDialog();
+ }
}
}
}
@@ -2081,7 +2083,7 @@ void VBlankHandler(void) {
storedMouseX = penX;
storedMouseY = penY;
- if (gameScreenSwap) {
+ if (gameScreenSwap && touchPadStyle) {
setIcon(3, storedMouseX - mouseHotspotX, storedMouseY - mouseHotspotY, 8, 0, true);
setIconMain(3, 0, 0, 0, 0, false);
} else {
@@ -2590,16 +2592,16 @@ void penUpdate() {
if ((!keyboardEnable) || (!isInsideKeyboard(IPC->touchXpx, IPC->touchYpx))) {
int diffX = IPC->touchXpx - penDownX;
int diffY = IPC->touchYpx - penDownY;
-
+
int speed = ABS(diffX) + ABS(diffY);
-
+
if ((ABS(diffX) < 35) && (ABS(diffY) < 35)) {
-
+
if (speed >= 8) {
diffX *= ((speed >> 3) * touchPadSensitivity) >> 3;
diffY *= ((speed >> 3) * touchPadSensitivity) >> 3;
}
-
+
penX += diffX;
penY += diffY;
@@ -2612,7 +2614,7 @@ void penUpdate() {
scX -= -penX;
penX = 0;
}
-
+
if (penY > 191) {
scY += penY - 191;
penY = 191;
@@ -2623,7 +2625,7 @@ void penUpdate() {
penY = 0;
}
}
-
+
// consolePrintf("x: %d y: %d\n", IPC->touchYpx - penDownY, IPC->touchYpx - penDownY);
}
penDownX = IPC->touchXpx;