aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorWillem Jan Palenstijn2011-11-15 19:27:36 +0100
committerWillem Jan Palenstijn2011-11-15 19:30:07 +0100
commit07a7c877ba9935fa3d0ae18ef6bb09549fb663e9 (patch)
tree720dfc32dc57ee24e84ed86d1627f79b9a51a38c /engines
parent0730d108c304db1fe138c5c398330bef47ee44cf (diff)
downloadscummvm-rg350-07a7c877ba9935fa3d0ae18ef6bb09549fb663e9.tar.gz
scummvm-rg350-07a7c877ba9935fa3d0ae18ef6bb09549fb663e9.tar.bz2
scummvm-rg350-07a7c877ba9935fa3d0ae18ef6bb09549fb663e9.zip
DREAMWEB: Comment and de-hardcode initrain
Diffstat (limited to 'engines')
-rw-r--r--engines/dreamweb/sprite.cpp83
1 files changed, 63 insertions, 20 deletions
diff --git a/engines/dreamweb/sprite.cpp b/engines/dreamweb/sprite.cpp
index f6083ff705..e08366cedd 100644
--- a/engines/dreamweb/sprite.cpp
+++ b/engines/dreamweb/sprite.cpp
@@ -935,47 +935,90 @@ Rain *DreamGenContext::splitintolines(uint8 x, uint8 y, Rain *rain) {
struct RainLocation {
uint8 location;
uint8 x, y;
- uint8 rainSpace;
+ uint8 rainSpacing;
+};
+
+const RainLocation rainLocationList[] =
+{
+ { 1,44,10,16 },
+ { 4,11,30,14 },
+ { 4,22,30,14 },
+ { 3,33,10,14 },
+ { 10,33,30,14 },
+ { 10,22,30,24 },
+ { 9,22,10,14 },
+ { 2,33,0,14 },
+ { 2,22,0,14 },
+ { 6,11,30,14 },
+ { 7,11,20,18 },
+ { 7,0,20,18 },
+ { 7,0,30,18 },
+ { 55,44,0,14 },
+ { 5,22,30,14 },
+
+ { 8,0,10,18 },
+ { 8,11,10,18 },
+ { 8,22,10,18 },
+ { 8,33,10,18 },
+ { 8,33,20,18 },
+ { 8,33,30,18 },
+ { 8,33,40,18 },
+ { 8,22,40,18 },
+ { 8,11,40,18 },
+
+ { 21,44,20,18 },
+ { 255,0,0,0 }
};
void DreamGenContext::initrain() {
+ const RainLocation *r = rainLocationList;
Rain *rainList = (Rain *)segRef(data.word(kBuffers)).ptr(kRainlist, 0);
Rain *rain = rainList;
- const RainLocation *rainLocationList = (const RainLocation *)cs.ptr(offset_rainlocations, 0);
- const RainLocation *rainLocation = rainLocationList;
- do {
- if (rainLocation->location == 0xff) {
- rain->x = 0xff;
- return;
- }
- if ((rainLocation->location == data.byte(kReallocation)) &&
- (rainLocation->x == data.byte(kMapx)) &&
- (rainLocation->y == data.byte(kMapy))) {
- data.byte(kRainspace) = rainLocation->rainSpace;
+ uint8 rainSpacing = 0;
+
+ // look up location in rainLocationList to determine rainSpacing
+ for (r = rainLocationList; r->location != 0xff; ++r) {
+ if (r->location == data.byte(kReallocation) &&
+ r->x == data.byte(kMapx) && r->y == data.byte(kMapy)) {
+ rainSpacing = r->rainSpacing;
break;
}
- ++rainLocation;
- } while (true);
+ }
+ if (rainSpacing == 0) {
+ // location not found in rainLocationList: no rain
+ rain->x = 0xff;
+ return;
+ }
+
+ // start lines of rain from top of screen
uint8 x = 4;
do {
- uint8 delta = (engine->randomNumber() & 31) + 3;
- if (delta >= data.byte(kRainspace))
- continue;
+ uint8 delta;
+ do {
+ delta = (engine->randomNumber() & 31) + 3;
+ } while (delta >= rainSpacing);
+
x += delta;
if (x >= data.byte(kMapxsize))
break;
+
rain = splitintolines(x, 0, rain);
} while (true);
+
+ // start lines of rain from side of screen
uint8 y = 0;
do {
- uint8 delta = (engine->randomNumber() & 31) + 3;
- if (delta >= data.byte(kRainspace))
- continue;
+ uint8 delta;
+ do {
+ delta = (engine->randomNumber() & 31) + 3;
+ } while (delta >= rainSpacing);
+
y += delta;
if (y >= data.byte(kMapysize))
break;
+
rain = splitintolines(data.byte(kMapxsize) - 1, y, rain);
} while (true);