aboutsummaryrefslogtreecommitdiff
path: root/scumm/akos.h
diff options
context:
space:
mode:
authorMax Horn2002-08-21 16:07:07 +0000
committerMax Horn2002-08-21 16:07:07 +0000
commitce46866403fdcc479cf9d67e4d430409b15dadc3 (patch)
tree75ebfaa1ed13f549959d76d3ce101c3e66f5451b /scumm/akos.h
parent662256f25dbe43abf67077a804e225738765f009 (diff)
downloadscummvm-rg350-ce46866403fdcc479cf9d67e4d430409b15dadc3.tar.gz
scummvm-rg350-ce46866403fdcc479cf9d67e4d430409b15dadc3.tar.bz2
scummvm-rg350-ce46866403fdcc479cf9d67e4d430409b15dadc3.zip
Initial revision
svn-id: r4785
Diffstat (limited to 'scumm/akos.h')
-rw-r--r--scumm/akos.h170
1 files changed, 170 insertions, 0 deletions
diff --git a/scumm/akos.h b/scumm/akos.h
new file mode 100644
index 0000000000..d24f4b48bc
--- /dev/null
+++ b/scumm/akos.h
@@ -0,0 +1,170 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001/2002 The ScummVM project
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * $Header$
+ *
+ */
+
+
+
+#if !defined(__GNUC__)
+#pragma START_PACK_STRUCTS
+#endif
+
+struct CostumeData;
+
+struct AkosHeader {
+ byte x_1[2];
+ byte flags;
+ byte x_2;
+ uint16 num_anims;
+ uint16 x_3;
+ uint16 codec;
+} GCC_PACK;
+
+struct AkosOffset {
+ uint32 akcd;
+ uint16 akci;
+} GCC_PACK;
+
+struct AkosCI {
+ uint16 width, height;
+ int16 rel_x, rel_y;
+ int16 move_x, move_y;
+} GCC_PACK;
+
+#if !defined(__GNUC__)
+#pragma END_PACK_STRUCTS
+#endif
+
+struct AkosRenderer {
+//protected:
+ CostumeData *cd;
+ int x, y; /* where to draw costume */
+ byte scale_x, scale_y; /* scaling */
+ byte clipping; /* clip mask */
+ bool charsetmask;
+ byte shadow_mode;
+ uint16 codec;
+ bool mirror; /* draw actor mirrored */
+ byte dirty_id;
+ byte *outptr;
+ uint outwidth, outheight;
+
+ /* pointer to various parts of the costume resource */
+ byte *akos;
+ AkosHeader *akhd;
+
+ /* current move offset */
+ int move_x, move_y;
+ /* movement of cel to decode */
+ int move_x_cur, move_y_cur;
+ /* width and height of cel to decode */
+ int width, height;
+
+ byte *srcptr;
+ byte *shadow_table;
+
+ struct {
+ /* codec stuff */
+ const byte *scaletable;
+ byte mask, shl;
+ bool doContinue;
+ byte repcolor;
+ byte replen;
+ int scaleXstep;
+ int x, y;
+ int tmp_x, tmp_y;
+ int y_pitch;
+ int skip_width;
+ byte *destptr;
+ byte *mask_ptr;
+ int imgbufoffs;
+ } v1;
+
+ /* put less used stuff at the bottom to optimize opcodes */
+ int draw_top, draw_bottom;
+ byte *akpl, *akci, *aksq;
+ AkosOffset *akof;
+ byte *akcd;
+
+ byte palette[256];
+
+protected:
+ Scumm *_vm;
+
+public:
+
+ // Constructor, sets all data to 0
+ AkosRenderer(Scumm *scumm) {
+ memset(this, 0, sizeof(AkosRenderer));
+ _vm = scumm;
+ } bool drawCostume();
+ void setPalette(byte *palette);
+ void setCostume(int costume);
+ void setFacing(Actor * a);
+ bool drawCostumeChannel(int chan);
+ void codec1();
+ void codec5();
+ void codec16();
+ void codec1_ignorePakCols(int num);
+ void c1_spec2();
+ void c1_spec3();
+};
+
+enum AkosOpcodes {
+ AKC_Return = 0xC001,
+ AKC_SetVar = 0xC010,
+ AKC_CmdQue3 = 0xC015,
+ AKC_ComplexChan = 0xC020,
+ AKC_Jump = 0xC030,
+ AKC_JumpIfSet = 0xC031,
+ AKC_AddVar = 0xC040,
+ AKC_Ignore = 0xC050,
+ AKC_IncVar = 0xC060,
+ AKC_CmdQue3Quick = 0xC061,
+ AKC_SkipStart = 0xC070,
+ AKC_SkipE = 0xC070,
+ AKC_SkipNE = 0xC071,
+ AKC_SkipL = 0xC072,
+ AKC_SkipLE = 0xC073,
+ AKC_SkipG = 0xC074,
+ AKC_SkipGE = 0xC075,
+ AKC_StartAnim = 0xC080,
+ AKC_StartVarAnim = 0xC081,
+ AKC_Random = 0xC082,
+ AKC_SetActorClip = 0xC083,
+ AKC_StartAnimInActor = 0xC084,
+ AKC_SetVarInActor = 0xC085,
+ AKC_HideActor = 0xC086,
+ AKC_SetDrawOffs = 0xC087,
+ AKC_JumpTable = 0xC088,
+ AKC_SoundStuff = 0xC089,
+ AKC_Flip = 0xC08A,
+ AKC_Cmd3 = 0xC08B,
+ AKC_Ignore3 = 0xC08C,
+ AKC_Ignore2 = 0xC08D,
+ AKC_JumpStart = 0xC090,
+ AKC_JumpE = 0xC090,
+ AKC_JumpNE = 0xC091,
+ AKC_JumpL = 0xC092,
+ AKC_JumpLE = 0xC093,
+ AKC_JumpG = 0xC094,
+ AKC_JumpGE = 0xC095,
+ AKC_ClearFlag = 0xC09F
+};