mirror of
https://github.com/scummvm/scummvm.git
synced 2025-04-02 10:52:32 -04:00
237 lines
5.8 KiB
C++
237 lines
5.8 KiB
C++
/* ScummVM - Graphic Adventure Engine
|
|
*
|
|
* ScummVM is the legal property of its developers, whose names
|
|
* are too numerous to list here. Please refer to the COPYRIGHT
|
|
* file distributed with this source distribution.
|
|
*
|
|
* 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 3 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, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
*/
|
|
|
|
#ifndef CHAMBER_ROOM_H
|
|
#define CHAMBER_ROOM_H
|
|
|
|
namespace Chamber {
|
|
|
|
#define SPOTFLG_1 0x01
|
|
#define SPOTFLG_2 0x02
|
|
#define SPOTFLG_8 0x08
|
|
#define SPOTFLG_10 0x10
|
|
#define SPOTFLG_20 0x20
|
|
#define SPOTFLG_40 0x40
|
|
#define SPOTFLG_80 0x80
|
|
|
|
/*static room object*/
|
|
/*TODO: manipulated from script, do not change*/
|
|
#include "common/pack-start.h"
|
|
typedef struct spot_t {
|
|
byte sx;
|
|
byte ex;
|
|
byte sy;
|
|
byte ey;
|
|
byte flags;
|
|
byte hint;
|
|
uint16 command;
|
|
} spot_t;
|
|
#include "common/pack-end.h"
|
|
|
|
#define PERSFLAGS 0xF0
|
|
#define PERSFLG_10 0x10
|
|
#define PERSFLG_20 0x20
|
|
#define PERSFLG_40 0x40
|
|
#define PERSFLG_80 0x80
|
|
|
|
/*person*/
|
|
/*TODO: manipulated from script, do not change*/
|
|
#include "common/pack-start.h"
|
|
typedef struct pers_t {
|
|
byte area; /*location*/
|
|
byte flags; /*flags in bits 7..4 and room index in bits 3..0*/
|
|
byte name; /*name index*/
|
|
byte index; /*animations index (in lutins_table) in bits 7..3 , spot index in bits 2..0*/
|
|
byte item; /*inventory item index (1-based)*/
|
|
} pers_t;
|
|
#include "common/pack-end.h"
|
|
|
|
#define ANIMFLG_USESPOT 0x80
|
|
|
|
typedef struct animdesc_t {
|
|
byte index; /*flag in bit 7, animation index in bits 6..0*/
|
|
union {
|
|
struct {
|
|
byte x, y;
|
|
} coords;
|
|
uint16 desc;
|
|
} params;
|
|
} animdesc_t;
|
|
|
|
typedef struct vortanims_t {
|
|
byte room;
|
|
animdesc_t field_1;
|
|
animdesc_t field_4;
|
|
animdesc_t field_7;
|
|
animdesc_t field_A;
|
|
} vortanims_t;
|
|
|
|
typedef struct turkeyanims_t {
|
|
byte room;
|
|
animdesc_t field_1;
|
|
animdesc_t field_4;
|
|
} turkeyanims_t;
|
|
|
|
extern byte scratch_mem1[8010];
|
|
extern byte *scratch_mem2;
|
|
|
|
extern rect_t room_bounds_rect;
|
|
|
|
extern byte last_object_hint;
|
|
extern byte object_hint;
|
|
extern byte command_hint;
|
|
extern byte last_command_hint;
|
|
|
|
extern uint16 next_protozorqs_ticks;
|
|
extern uint16 next_vorts_ticks;
|
|
extern uint16 next_vorts_cmd;
|
|
extern uint16 next_turkey_ticks;
|
|
extern uint16 next_turkey_cmd;
|
|
|
|
#define MAX_SPRITES 16
|
|
|
|
extern byte *sprites_list[MAX_SPRITES];
|
|
|
|
#define MAX_DOORS 5
|
|
|
|
extern byte *doors_list[MAX_DOORS];
|
|
|
|
extern byte zone_palette;
|
|
|
|
extern spot_t *zone_spots;
|
|
extern spot_t *zone_spots_end;
|
|
extern spot_t *zone_spots_cur;
|
|
|
|
extern vortanims_t vortsanim_list[];
|
|
extern vortanims_t *vortanims_ptr;
|
|
|
|
extern turkeyanims_t turkeyanim_list[];
|
|
extern turkeyanims_t *turkeyanims_ptr;
|
|
extern pers_t *aspirant_ptr;
|
|
extern spot_t *aspirant_spot;
|
|
extern spot_t *found_spot;
|
|
extern byte **spot_sprite;
|
|
|
|
extern byte *lutin_mem;
|
|
|
|
extern byte skip_zone_transition;
|
|
|
|
extern byte in_de_profundis;
|
|
|
|
extern byte zone_name;
|
|
extern byte room_hint_bar_width;
|
|
extern byte zone_spr_index;
|
|
extern byte zone_obj_count;
|
|
extern byte room_hint_bar_coords_x;
|
|
extern byte room_hint_bar_coords_y;
|
|
|
|
extern uint16 drops_cleanup_time;
|
|
|
|
extern const byte patrol_route[];
|
|
extern const byte *timed_seq_ptr;
|
|
|
|
typedef struct thewalldoor_t {
|
|
byte height;
|
|
byte width;
|
|
uint16 pitch;
|
|
uint16 offs;
|
|
byte *pixels;
|
|
} thewalldoor_t;
|
|
|
|
extern thewalldoor_t the_wall_doors[2];
|
|
|
|
int16 isInRect(byte x, byte y, rect_t *rect);
|
|
int16 isCursorInRect(rect_t *rect);
|
|
void selectSpotCursor(void);
|
|
|
|
void checkHotspots(byte m, byte v);
|
|
|
|
void animateSpot(const animdesc_t *info);
|
|
byte *loadPuzzlToScratch(byte index);
|
|
|
|
void drawObjectHint(void);
|
|
void showObjectHint(byte *target);
|
|
void drawCommandHint(void);
|
|
void showCommandHint(byte *target);
|
|
|
|
void drawCharacterSprite(byte spridx, byte x, byte y, byte *target);
|
|
char drawZoneAniSprite(rect_t *rect, uint16 index, byte *target);
|
|
|
|
void drawHintsAndCursor(byte *target);
|
|
|
|
void drawTheWallDoors(void);
|
|
void mergeSpritesData(byte *target, uint16 pitch, byte *source, uint16 w, uint16 h);
|
|
void mergeSpritesDataFlip(byte *target, uint16 pitch, byte *source, uint16 w, uint16 h);
|
|
|
|
void refreshSpritesData(void);
|
|
void blitSpritesToBackBuffer(void);
|
|
byte *backupSpotImage(spot_t *spot, byte **spotback, byte *buffer);
|
|
void backupSpotsImages(void);
|
|
|
|
void selectPalette(void);
|
|
void selectSpecificPalette(byte index);
|
|
|
|
byte findSpotByFlags(byte mask, byte value);
|
|
byte selectPerson(byte offset);
|
|
|
|
void findPerson(void);
|
|
|
|
void beforeChangeZone(byte index);
|
|
void drawRoomItemsIndicator(void);
|
|
void drawRoomStaticObject(byte *aptr, byte *rx, byte *ry, byte *rw, byte *rh);
|
|
void drawRoomStatics(void);
|
|
void redrawRoomStatics(byte index, byte y_step);
|
|
void drawPersons(void);
|
|
void refreshZone(void);
|
|
void changeZone(byte index);
|
|
|
|
void drawSpots(byte *target);
|
|
void animateSpots(byte *target);
|
|
|
|
byte findInitialSpot(void);
|
|
void animRoomDoorOpen(byte index);
|
|
void animRoomDoorClose(byte index);
|
|
|
|
uint16 getPuzzlSprite(byte index, byte x, byte y, uint16 *w, uint16 *h, uint16 *ofs);
|
|
|
|
void bounceCurrentItem(byte flags, byte y);
|
|
|
|
void backupScreenOfSpecialRoom(void);
|
|
void restoreScreenOfSpecialRoom(void);
|
|
|
|
void theWallPhase3_DoorOpen1(void);
|
|
void theWallPhase0_DoorOpen2(void);
|
|
void theWallPhase1_DoorClose1(void);
|
|
void theWallPhase2_DoorClose2(void);
|
|
|
|
void prepareAspirant(void);
|
|
void prepareVorts(void);
|
|
void prepareTurkey(void);
|
|
|
|
void updateProtozorqs(void);
|
|
void checkGameTimeLimit(void);
|
|
void cleanupDroppedItems(void);
|
|
|
|
void resetAllPersons(void);
|
|
|
|
} // End of namespace Chamber
|
|
|
|
#endif
|