diff options
-rw-r--r-- | TODO | 9 | ||||
-rw-r--r-- | scumm/intern.h | 1 | ||||
-rw-r--r-- | scumm/script_v100he.cpp | 60 |
3 files changed, 65 insertions, 5 deletions
@@ -250,25 +250,26 @@ SCUMM - Add rename/delete file support, to make file opcodes function correctly - Fix nukeArrays, it is nuking wrong arrays in stopObjectCode() sometimes * Humongous entertainment >= v7 titles: - - Add support for palette slots (_numPalettes * 1024) in HE99+ games.(For ff5demo/freddicove) + - Add support for palette slots (_numPalettes * 1024) in HE99+ games.(For ff5demo/freddicove/pajama3) - Add mask support to akos codec32, charset shouldn't be drawn under moving actors - Add support for song sync. in HE80+ games. (Used in ff2-demo/freddi2/pajama) - Add support for SBNG sound resources for songs (Used in ff2-demo/freddi2/pajama) - Add support for processWizImage mode 6 (For lost/smaller) - Add support for processWizImage mode 9 (For freddicove/bb2demo/footdemo) - Add support for additional drawWizImage flags (cyx) + - Add support for drawWizComplexPolygon (For Ski Ride & Credits of pajama3) - Add shadows support for akos codecs in HE90+ games, uses XMAP resources. - Add arrayOps case 127 (For chase/lost/smaller/bb2demo/footdemo). - Add support for array sorting (Used in lost/smaller). - - Fix actor glitches in pajama2 + - Fix actor parts disappearing in pajama2/racedemo (Requires to XMAP support?) - Fix cursor transparency in puzzle of pajama2 - Fix sprites graphical glitches - Fix inventory background/items disappearing in puttzoo/zoodemo/putttime/timedemo - Add support for o90_getPolygonOverlap case9 (Used in lost/smaller) - Add support for o90_getPolygonOverlap case10 (Used in Caramel Pit of pajama3) - Add support for floodState (For puzzle in pajama2) - - Add support for o80_unknownE0 (For binoculars in pajama2 and black board in freddi2) - - Add support for various new opcodes + - Add support for o80_unknownE0 type1 (For binoculars in pajama2) + - Add support for o80_unknownE0 type2 (For black board in freddi2 and paper in spyfox) Broken Sword 2 ============== diff --git a/scumm/intern.h b/scumm/intern.h index c2018f315a..f6d63c4f61 100644 --- a/scumm/intern.h +++ b/scumm/intern.h @@ -1073,6 +1073,7 @@ protected: void o100_dim2dimArray(); void o100_redim2dimArray(); void o100_dimArray(); + void o100_unknownE0(); void o100_drawObject(); void o100_setSpriteGroupInfo(); void o100_resourceRoutines(); diff --git a/scumm/script_v100he.cpp b/scumm/script_v100he.cpp index f9143c32e4..d3019b2f2b 100644 --- a/scumm/script_v100he.cpp +++ b/scumm/script_v100he.cpp @@ -88,7 +88,7 @@ void ScummEngine_v100he::setupOpcodes() { /* 24 */ OPCODE(o72_drawWizImage), OPCODE(o80_drawWizPolygon), - OPCODE(o6_invalid), + OPCODE(o100_unknownE0), OPCODE(o100_drawObject), /* 28 */ OPCODE(o6_dup), @@ -812,6 +812,64 @@ void ScummEngine_v100he::o100_dimArray() { defineArray(fetchScriptWord(), data, 0, 0, 0, pop()); } +void ScummEngine_v100he::o100_unknownE0() { + // wizImage related + int b, c, d, num, x1, y1, type = 0; + + b = pop(); + num = pop(); + c = pop(); + d = pop(); + y1 = pop(); + x1 = pop(); + + byte subOp = fetchScriptByte(); + + switch (subOp) { + case 1: + { + Actor *a = derefActorSafe(num, "o100_unknownE0"); + int top_actor = a->top; + int bottom_actor = a->bottom; + a->drawToBackBuf = true; + a->needRedraw = true; + a->drawActorCostume(); + a->drawToBackBuf = false; + a->needRedraw = true; + a->drawActorCostume(); + a->needRedraw = false; + + if (a->top > top_actor) + a->top = top_actor; + if (a->bottom < bottom_actor) + a->bottom = bottom_actor; + + type = 2; + } + break; + case 20: + type = 1; + break; + case 40: + { + WizImage wi; + wi.flags = 0; + wi.y1 = y1; + wi.x1 = x1; + wi.resNum = num; + wi.state = 0; + displayWizImage(&wi); + + type = 3; + } + break; + default: + error("o100_unknownE0: default case %d", subOp); + } + + debug(1,"o100_unknownE0 stub: type %d (%d, num %d, %d, %d, y %d, x %d)", type, b, num, c, d, y1, x1); +} + void ScummEngine_v100he::o100_drawObject() { byte subOp = fetchScriptByte(); int state, y, x; |