DREAMWEB: 'transferinv' ported to C++
This commit is contained in:
parent
b71123ef4f
commit
6a46429c44
5 changed files with 20 additions and 52 deletions
|
@ -170,6 +170,7 @@ generator = cpp(context, "DreamGen", blacklist = [
|
|||
'paneltomap',
|
||||
'obpicture',
|
||||
'delthisone',
|
||||
'transferinv',
|
||||
], skip_output = [
|
||||
# These functions are processed but not output
|
||||
'dreamweb',
|
||||
|
|
|
@ -2766,55 +2766,6 @@ void DreamGenContext::createpanel2() {
|
|||
showframe();
|
||||
}
|
||||
|
||||
void DreamGenContext::transferinv() {
|
||||
STACK_CHECK;
|
||||
di = data.word(kExframepos);
|
||||
push(di);
|
||||
al = data.byte(kExpos);
|
||||
ah = 0;
|
||||
bx = ax;
|
||||
_add(ax, ax);
|
||||
_add(ax, bx);
|
||||
_inc(ax);
|
||||
cx = 6;
|
||||
_mul(cx);
|
||||
es = data.word(kExtras);
|
||||
bx = (0);
|
||||
_add(bx, ax);
|
||||
_add(di, (0+2080));
|
||||
push(bx);
|
||||
al = data.byte(kItemtotran);
|
||||
ah = 0;
|
||||
bx = ax;
|
||||
_add(ax, ax);
|
||||
_add(ax, bx);
|
||||
_inc(ax);
|
||||
cx = 6;
|
||||
_mul(cx);
|
||||
ds = data.word(kFreeframes);
|
||||
bx = (0);
|
||||
_add(bx, ax);
|
||||
si = (0+2080);
|
||||
al = ds.byte(bx);
|
||||
ah = 0;
|
||||
cl = ds.byte(bx+1);
|
||||
ch = 0;
|
||||
_add(si, ds.word(bx+2));
|
||||
dx = ds.word(bx+4);
|
||||
bx = pop();
|
||||
es.byte(bx+0) = al;
|
||||
es.byte(bx+1) = cl;
|
||||
es.word(bx+4) = dx;
|
||||
_mul(cx);
|
||||
cx = ax;
|
||||
push(cx);
|
||||
_movsb(cx, true);
|
||||
cx = pop();
|
||||
ax = pop();
|
||||
es.word(bx+2) = ax;
|
||||
_add(data.word(kExframepos), cx);
|
||||
}
|
||||
|
||||
void DreamGenContext::transfermap() {
|
||||
STACK_CHECK;
|
||||
di = data.word(kExframepos);
|
||||
|
@ -17732,7 +17683,6 @@ void DreamGenContext::__dispatch_call(uint16 addr) {
|
|||
case addr_createpanel2: createpanel2(); break;
|
||||
case addr_vsync: vsync(); break;
|
||||
case addr_doshake: doshake(); break;
|
||||
case addr_transferinv: transferinv(); break;
|
||||
case addr_transfermap: transfermap(); break;
|
||||
case addr_fadedos: fadedos(); break;
|
||||
case addr_dofade: dofade(); break;
|
||||
|
|
|
@ -557,7 +557,6 @@ public:
|
|||
static const uint16 addr_dofade = 0xc24c;
|
||||
static const uint16 addr_fadedos = 0xc248;
|
||||
static const uint16 addr_transfermap = 0xc244;
|
||||
static const uint16 addr_transferinv = 0xc240;
|
||||
static const uint16 addr_doshake = 0xc20c;
|
||||
static const uint16 addr_vsync = 0xc208;
|
||||
static const uint16 addr_createpanel2 = 0xc200;
|
||||
|
@ -1775,7 +1774,7 @@ public:
|
|||
void look();
|
||||
void setmouse();
|
||||
//void checkone();
|
||||
void transferinv();
|
||||
//void transferinv();
|
||||
void candles2();
|
||||
void pickupob();
|
||||
void error();
|
||||
|
|
|
@ -202,4 +202,5 @@
|
|||
void getexpos();
|
||||
void paneltomap();
|
||||
void obpicture();
|
||||
void transferinv();
|
||||
|
||||
|
|
|
@ -415,5 +415,22 @@ void DreamGenContext::paneltomap() {
|
|||
multiget(segRef(data.word(kMapstore)).ptr(0, 0), data.word(kMapxstart) + data.word(kMapadx), data.word(kMapystart) + data.word(kMapady), data.byte(kMapxsize), data.byte(kMapysize));
|
||||
}
|
||||
|
||||
void DreamGenContext::transferinv() {
|
||||
const Frame *freeFrames = (const Frame *)segRef(data.word(kFreeframes)).ptr(kFrframedata, 0);
|
||||
const Frame *freeFrame = freeFrames + (3 * data.byte(kItemtotran) + 1);
|
||||
Frame *exFrames = (Frame *)segRef(data.word(kExtras)).ptr(kExframedata, 0);
|
||||
Frame *exFrame = exFrames + (3 * data.byte(kExpos) + 1);
|
||||
exFrame->width = freeFrame->width;
|
||||
exFrame->height = freeFrame->height;
|
||||
exFrame->x = freeFrame->x;
|
||||
exFrame->y = freeFrame->y;
|
||||
uint16 byteCount = freeFrame->width * freeFrame->height;
|
||||
const uint8 *src = segRef(data.word(kFreeframes)).ptr(kFrframes + freeFrame->ptr(), byteCount);
|
||||
uint8 *dst = segRef(data.word(kExtras)).ptr(kExframes + data.word(kExframepos), byteCount);
|
||||
memcpy(dst, src, byteCount);
|
||||
exFrame->setPtr(data.word(kExframepos));
|
||||
data.word(kExframepos) += byteCount;
|
||||
}
|
||||
|
||||
} /*namespace dreamgen */
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue