mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-11 13:45:25 +00:00
DREAMWEB: 'splitintolines' ported to C++
This commit is contained in:
parent
46ec2c4d73
commit
11ae1d5940
@ -209,6 +209,7 @@ generator = cpp(context, "DreamGen", blacklist = [
|
|||||||
'showwatch',
|
'showwatch',
|
||||||
'roomname',
|
'roomname',
|
||||||
'transfertext',
|
'transfertext',
|
||||||
|
'splitintolines',
|
||||||
], skip_output = [
|
], skip_output = [
|
||||||
# These functions are processed but not output
|
# These functions are processed but not output
|
||||||
'dreamweb',
|
'dreamweb',
|
||||||
|
@ -2329,62 +2329,6 @@ finishinitrain:
|
|||||||
_stosb();
|
_stosb();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DreamGenContext::splitintolines() {
|
|
||||||
STACK_CHECK;
|
|
||||||
lookforlinestart:
|
|
||||||
getblockofpixel();
|
|
||||||
_cmp(al, 0);
|
|
||||||
if (!flags.z())
|
|
||||||
goto foundlinestart;
|
|
||||||
_dec(cl);
|
|
||||||
_inc(ch);
|
|
||||||
_cmp(cl, 0);
|
|
||||||
if (flags.z())
|
|
||||||
return /* (endofthisline) */;
|
|
||||||
_cmp(ch, data.byte(kMapysize));
|
|
||||||
if (!flags.c())
|
|
||||||
return /* (endofthisline) */;
|
|
||||||
goto lookforlinestart;
|
|
||||||
foundlinestart:
|
|
||||||
es.word(di) = cx;
|
|
||||||
bh = 1;
|
|
||||||
lookforlineend:
|
|
||||||
getblockofpixel();
|
|
||||||
_cmp(al, 0);
|
|
||||||
if (flags.z())
|
|
||||||
goto foundlineend;
|
|
||||||
_dec(cl);
|
|
||||||
_inc(ch);
|
|
||||||
_cmp(cl, 0);
|
|
||||||
if (flags.z())
|
|
||||||
goto foundlineend;
|
|
||||||
_cmp(ch, data.byte(kMapysize));
|
|
||||||
if (!flags.c())
|
|
||||||
goto foundlineend;
|
|
||||||
_inc(bh);
|
|
||||||
goto lookforlineend;
|
|
||||||
foundlineend:
|
|
||||||
push(cx);
|
|
||||||
es.byte(di+2) = bh;
|
|
||||||
randomnumber();
|
|
||||||
es.byte(di+3) = al;
|
|
||||||
randomnumber();
|
|
||||||
es.byte(di+4) = al;
|
|
||||||
randomnumber();
|
|
||||||
_and(al, 3);
|
|
||||||
_add(al, 4);
|
|
||||||
es.byte(di+5) = al;
|
|
||||||
_add(di, 6);
|
|
||||||
cx = pop();
|
|
||||||
_cmp(cl, 0);
|
|
||||||
if (flags.z())
|
|
||||||
return /* (endofthisline) */;
|
|
||||||
_cmp(ch, data.byte(kMapysize));
|
|
||||||
if (!flags.c())
|
|
||||||
return /* (endofthisline) */;
|
|
||||||
goto lookforlinestart;
|
|
||||||
}
|
|
||||||
|
|
||||||
void DreamGenContext::liftnoise() {
|
void DreamGenContext::liftnoise() {
|
||||||
STACK_CHECK;
|
STACK_CHECK;
|
||||||
_cmp(data.byte(kReallocation), 5);
|
_cmp(data.byte(kReallocation), 5);
|
||||||
@ -16342,7 +16286,6 @@ void DreamGenContext::__dispatch_call(uint16 addr) {
|
|||||||
case addr_adjustright: adjustright(); break;
|
case addr_adjustright: adjustright(); break;
|
||||||
case addr_reminders: reminders(); break;
|
case addr_reminders: reminders(); break;
|
||||||
case addr_initrain: initrain(); break;
|
case addr_initrain: initrain(); break;
|
||||||
case addr_splitintolines: splitintolines(); break;
|
|
||||||
case addr_backobject: backobject(); break;
|
case addr_backobject: backobject(); break;
|
||||||
case addr_liftnoise: liftnoise(); break;
|
case addr_liftnoise: liftnoise(); break;
|
||||||
case addr_random: random(); break;
|
case addr_random: random(); break;
|
||||||
|
@ -541,7 +541,6 @@ public:
|
|||||||
static const uint16 addr_random = 0xc17c;
|
static const uint16 addr_random = 0xc17c;
|
||||||
static const uint16 addr_liftnoise = 0xc178;
|
static const uint16 addr_liftnoise = 0xc178;
|
||||||
static const uint16 addr_backobject = 0xc170;
|
static const uint16 addr_backobject = 0xc170;
|
||||||
static const uint16 addr_splitintolines = 0xc164;
|
|
||||||
static const uint16 addr_initrain = 0xc160;
|
static const uint16 addr_initrain = 0xc160;
|
||||||
static const uint16 addr_reminders = 0xc15c;
|
static const uint16 addr_reminders = 0xc15c;
|
||||||
static const uint16 addr_adjustright = 0xc158;
|
static const uint16 addr_adjustright = 0xc158;
|
||||||
@ -1360,7 +1359,7 @@ public:
|
|||||||
void watchcount();
|
void watchcount();
|
||||||
void fadedownmon();
|
void fadedownmon();
|
||||||
void loadcart();
|
void loadcart();
|
||||||
//void calcfrframe();
|
//void splitintolines();
|
||||||
void bartender();
|
void bartender();
|
||||||
void eden();
|
void eden();
|
||||||
void showdiary();
|
void showdiary();
|
||||||
@ -1882,7 +1881,7 @@ public:
|
|||||||
void closefile();
|
void closefile();
|
||||||
void delcurs();
|
void delcurs();
|
||||||
void randomaccess();
|
void randomaccess();
|
||||||
void splitintolines();
|
//void calcfrframe();
|
||||||
//void checkifex();
|
//void checkifex();
|
||||||
//void findobname();
|
//void findobname();
|
||||||
void initialmoncols();
|
void initialmoncols();
|
||||||
|
@ -890,5 +890,58 @@ void DreamGenContext::addtopeoplelist(ReelRoutine *routine) {
|
|||||||
data.word(kListpos) += sizeof(People);
|
data.word(kListpos) += sizeof(People);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DreamGenContext::splitintolines() {
|
||||||
|
uint8 x = cl;
|
||||||
|
uint8 y = ch;
|
||||||
|
Rain *rain = (Rain *)es.ptr(di, 0);
|
||||||
|
Rain *newRain = splitintolines(x, y, rain);
|
||||||
|
di += (newRain - rain) * sizeof(Rain);
|
||||||
|
}
|
||||||
|
|
||||||
|
Rain *DreamGenContext::splitintolines(uint8 x, uint8 y, Rain *rain) {
|
||||||
|
do {
|
||||||
|
// Look for line start
|
||||||
|
do {
|
||||||
|
if (getblockofpixel(x, y))
|
||||||
|
break;
|
||||||
|
--x;
|
||||||
|
++y;
|
||||||
|
if (x == 0)
|
||||||
|
return rain;
|
||||||
|
if (y >= data.byte(kMapysize))
|
||||||
|
return rain;
|
||||||
|
} while (true);
|
||||||
|
|
||||||
|
rain->x = x;
|
||||||
|
rain->y = y;
|
||||||
|
|
||||||
|
uint8 length = 1;
|
||||||
|
|
||||||
|
// Look for line end
|
||||||
|
do {
|
||||||
|
if (! getblockofpixel(x, y))
|
||||||
|
break;
|
||||||
|
--x;
|
||||||
|
++y;
|
||||||
|
if (x == 0)
|
||||||
|
break;
|
||||||
|
if (y >= data.byte(kMapysize))
|
||||||
|
break;
|
||||||
|
++length;
|
||||||
|
} while (true);
|
||||||
|
|
||||||
|
rain->size = length;
|
||||||
|
rain->w3_lo = engine->randomNumber();
|
||||||
|
rain->w3_hi = engine->randomNumber();
|
||||||
|
rain->b5 = (engine->randomNumber() & 3) + 4;
|
||||||
|
++rain;
|
||||||
|
if (x == 0)
|
||||||
|
return rain;
|
||||||
|
if (y >= data.byte(kMapysize))
|
||||||
|
return rain;
|
||||||
|
} while (true);
|
||||||
|
return rain;
|
||||||
|
}
|
||||||
|
|
||||||
} /*namespace dreamgen */
|
} /*namespace dreamgen */
|
||||||
|
|
||||||
|
@ -253,4 +253,6 @@
|
|||||||
void showwatch();
|
void showwatch();
|
||||||
void roomname();
|
void roomname();
|
||||||
void transfertext();
|
void transfertext();
|
||||||
|
void splitintolines();
|
||||||
|
Rain *splitintolines(uint8 x, uint8 y, Rain *rain);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user