22#ifndef AGS_ENGINE_AC_CHARACTER_H
23#define AGS_ENGINE_AC_CHARACTER_H
25#include "ags/shared/ac/character_info.h"
26#include "ags/engine/ac/character_extras.h"
27#include "ags/engine/ac/dynobj/script_object.h"
28#include "ags/engine/ac/dynobj/script_inv_item.h"
29#include "ags/engine/ac/dynobj/script_overlay.h"
30#include "ags/engine/game/viewport.h"
31#include "ags/shared/util/geometry.h"
37bool is_valid_character(
int char_id);
40bool AssertCharacter(
const char *apiname,
int char_id);
42void Character_AddInventory(CharacterInfo *chaa, ScriptInvItem *invi,
int addIndex);
43void Character_AddWaypoint(CharacterInfo *chaa,
int x,
int y);
44void Character_Animate(CharacterInfo *chaa,
int loop,
int delay,
int repeat,
int blocking,
int direction,
int sframe = 0,
int volume = 100);
45void Character_Animate5(CharacterInfo *chaa,
int loop,
int delay,
int repeat,
int blocking,
int direction);
46void Character_ChangeRoomAutoPosition(CharacterInfo *chaa,
int room,
int newPos);
47void Character_ChangeRoom(CharacterInfo *chaa,
int room,
int x,
int y);
48void Character_ChangeRoomSetLoop(CharacterInfo *chaa,
int room,
int x,
int y,
int direction);
49void Character_ChangeView(CharacterInfo *chap,
int vii);
50void Character_FaceDirection(CharacterInfo *char1,
int direction,
int blockingStyle);
51void Character_FaceCharacter(CharacterInfo *char1, CharacterInfo *char2,
int blockingStyle);
52void Character_FaceLocation(CharacterInfo *char1,
int xx,
int yy,
int blockingStyle);
53void Character_FaceObject(CharacterInfo *char1, ScriptObject *obj,
int blockingStyle);
54void Character_FollowCharacter(CharacterInfo *chaa, CharacterInfo *tofollow,
int distaway,
int eagerness);
55int Character_IsCollidingWithChar(CharacterInfo *char1, CharacterInfo *char2);
56int Character_IsCollidingWithObject(CharacterInfo *chin, ScriptObject *objid);
57bool Character_IsInteractionAvailable(CharacterInfo *cchar,
int mood);
58void Character_LockView(CharacterInfo *chap,
int vii);
59void Character_LockViewEx(CharacterInfo *chap,
int vii,
int stopMoving);
60void Character_LockViewAligned(CharacterInfo *chap,
int vii,
int loop,
int align);
61void Character_LockViewAligned_Old(CharacterInfo *chap,
int vii,
int loop,
int align);
62void Character_LockViewAlignedEx(CharacterInfo *chap,
int vii,
int loop,
int align,
int stopMoving);
63void Character_LockViewAlignedEx_Old(CharacterInfo *chap,
int vii,
int loop,
int align,
int stopMoving);
64void Character_LockViewFrame(CharacterInfo *chaa,
int view,
int loop,
int frame);
65void Character_LockViewFrameEx(CharacterInfo *chaa,
int view,
int loop,
int frame,
int stopMoving);
66void Character_LockViewOffset(CharacterInfo *chap,
int vii,
int xoffs,
int yoffs);
67void Character_LockViewOffsetEx(CharacterInfo *chap,
int vii,
int xoffs,
int yoffs,
int stopMoving);
68void Character_LoseInventory(CharacterInfo *chap, ScriptInvItem *invi);
69void Character_PlaceOnWalkableArea(CharacterInfo *chap);
70void Character_RemoveTint(CharacterInfo *chaa);
71int Character_GetHasExplicitTint(CharacterInfo *chaa);
72int Character_GetHasExplicitTint_Old(CharacterInfo *ch);
73void Character_Say(CharacterInfo *chaa,
const char *text);
74void Character_SayAt(CharacterInfo *chaa,
int x,
int y,
int width,
const char *texx);
75ScriptOverlay *Character_SayBackground(CharacterInfo *chaa,
const char *texx);
76void Character_SetAsPlayer(CharacterInfo *chaa);
77void Character_SetIdleView(CharacterInfo *chaa,
int iview,
int itime);
78void Character_SetOption(CharacterInfo *chaa,
int flag,
int yesorno);
79bool Character_SetProperty(CharacterInfo *chaa,
const char *property,
int value);
80bool Character_SetTextProperty(CharacterInfo *chaa,
const char *property,
const char *value);
81void Character_SetSpeed(CharacterInfo *chaa,
int xspeed,
int yspeed);
82void Character_StopMoving(CharacterInfo *charp);
83void Character_Tint(CharacterInfo *chaa,
int red,
int green,
int blue,
int opacity,
int luminance);
84void Character_Think(CharacterInfo *chaa,
const char *text);
85void Character_UnlockView(CharacterInfo *chaa);
86void Character_UnlockViewEx(CharacterInfo *chaa,
int stopMoving);
87void Character_Walk(CharacterInfo *chaa,
int x,
int y,
int blocking,
int direct);
88void Character_Move(CharacterInfo *chaa,
int x,
int y,
int blocking,
int direct);
89void Character_WalkStraight(CharacterInfo *chaa,
int xx,
int yy,
int blocking);
91void Character_RunInteraction(CharacterInfo *chaa,
int mood);
95int Character_GetProperty(CharacterInfo *chaa,
const char *property);
96void Character_GetPropertyText(CharacterInfo *chaa,
const char *property,
char *bufer);
97const char *Character_GetTextProperty(CharacterInfo *chaa,
const char *property);
99ScriptInvItem *Character_GetActiveInventory(CharacterInfo *chaa);
100void Character_SetActiveInventory(CharacterInfo *chaa, ScriptInvItem *iit);
101int Character_GetAnimating(CharacterInfo *chaa);
102int Character_GetAnimationSpeed(CharacterInfo *chaa);
103void Character_SetAnimationSpeed(CharacterInfo *chaa,
int newval);
104int Character_GetBaseline(CharacterInfo *chaa);
105void Character_SetBaseline(CharacterInfo *chaa,
int basel);
106int Character_GetBlinkInterval(CharacterInfo *chaa);
107void Character_SetBlinkInterval(CharacterInfo *chaa,
int interval);
108int Character_GetBlinkView(CharacterInfo *chaa);
109void Character_SetBlinkView(CharacterInfo *chaa,
int vii);
110int Character_GetBlinkWhileThinking(CharacterInfo *chaa);
111void Character_SetBlinkWhileThinking(CharacterInfo *chaa,
int yesOrNo);
112int Character_GetBlockingHeight(CharacterInfo *chaa);
113void Character_SetBlockingHeight(CharacterInfo *chaa,
int hit);
114int Character_GetBlockingWidth(CharacterInfo *chaa);
115void Character_SetBlockingWidth(CharacterInfo *chaa,
int wid);
116int Character_GetDiagonalWalking(CharacterInfo *chaa);
117void Character_SetDiagonalWalking(CharacterInfo *chaa,
int yesorno);
118int Character_GetClickable(CharacterInfo *chaa);
119void Character_SetClickable(CharacterInfo *chaa,
int clik);
120int Character_GetDestinationX(CharacterInfo *chaa);
121int Character_GetDestinationY(CharacterInfo *chaa);
122int Character_GetID(CharacterInfo *chaa);
123int Character_GetFrame(CharacterInfo *chaa);
124void Character_SetFrame(CharacterInfo *chaa,
int newval);
125int Character_GetIdleView(CharacterInfo *chaa);
126int Character_GetIInventoryQuantity(CharacterInfo *chaa,
int index);
127int Character_HasInventory(CharacterInfo *chaa, ScriptInvItem *invi);
128void Character_SetIInventoryQuantity(CharacterInfo *chaa,
int index,
int quant);
129int Character_GetIgnoreLighting(CharacterInfo *chaa);
130void Character_SetIgnoreLighting(CharacterInfo *chaa,
int yesorno);
131int Character_GetIgnoreScaling(CharacterInfo *chaa);
132void Character_SetIgnoreScaling(CharacterInfo *chaa,
int yesorno);
133void Character_SetManualScaling(CharacterInfo *chaa,
int yesorno);
134int Character_GetIgnoreWalkbehinds(CharacterInfo *chaa);
135void Character_SetIgnoreWalkbehinds(CharacterInfo *chaa,
int yesorno);
136int Character_GetMovementLinkedToAnimation(CharacterInfo *chaa);
137void Character_SetMovementLinkedToAnimation(CharacterInfo *chaa,
int yesorno);
138int Character_GetLoop(CharacterInfo *chaa);
139void Character_SetLoop(CharacterInfo *chaa,
int newval);
140int Character_GetMoving(CharacterInfo *chaa);
141const char *Character_GetName(CharacterInfo *chaa);
142void Character_SetName(CharacterInfo *chaa,
const char *newName);
143int Character_GetNormalView(CharacterInfo *chaa);
144int Character_GetPreviousRoom(CharacterInfo *chaa);
145int Character_GetRoom(CharacterInfo *chaa);
146int Character_GetScaleMoveSpeed(CharacterInfo *chaa);
147void Character_SetScaleMoveSpeed(CharacterInfo *chaa,
int yesorno);
148int Character_GetScaleVolume(CharacterInfo *chaa);
149void Character_SetScaleVolume(CharacterInfo *chaa,
int yesorno);
150int Character_GetScaling(CharacterInfo *chaa);
151void Character_SetScaling(CharacterInfo *chaa,
int zoomlevel);
152int Character_GetSolid(CharacterInfo *chaa);
153void Character_SetSolid(CharacterInfo *chaa,
int yesorno);
154int Character_GetSpeaking(CharacterInfo *chaa);
155int Character_GetSpeechColor(CharacterInfo *chaa);
156void Character_SetSpeechColor(CharacterInfo *chaa,
int ncol);
157void Character_SetSpeechAnimationDelay(CharacterInfo *chaa,
int newDelay);
158int Character_GetSpeechView(CharacterInfo *chaa);
159void Character_SetSpeechView(CharacterInfo *chaa,
int vii);
160int Character_GetThinkView(CharacterInfo *chaa);
161void Character_SetThinkView(CharacterInfo *chaa,
int vii);
162int Character_GetTransparency(CharacterInfo *chaa);
163void Character_SetTransparency(CharacterInfo *chaa,
int trans);
164int Character_GetTurnBeforeWalking(CharacterInfo *chaa);
165void Character_SetTurnBeforeWalking(CharacterInfo *chaa,
int yesorno);
166int Character_GetView(CharacterInfo *chaa);
167int Character_GetWalkSpeedX(CharacterInfo *chaa);
168int Character_GetWalkSpeedY(CharacterInfo *chaa);
169int Character_GetX(CharacterInfo *chaa);
170void Character_SetX(CharacterInfo *chaa,
int newval);
171int Character_GetY(CharacterInfo *chaa);
172void Character_SetY(CharacterInfo *chaa,
int newval);
173int Character_GetZ(CharacterInfo *chaa);
174void Character_SetZ(CharacterInfo *chaa,
int newval);
175int Character_GetSpeakingFrame(CharacterInfo *chaa);
188void animate_character(CharacterInfo *chap,
int loopn,
int sppd,
int rept,
int direction = 0,
int sframe = 0,
int volume = 100);
190void stop_character_anim(CharacterInfo *chap);
191void walk_character(
int chac,
int tox,
int toy,
int ignwal,
bool autoWalkAnims);
192int find_looporder_index(
int curloop);
194int useDiagonal(CharacterInfo *char1);
196int hasUpDownLoops(CharacterInfo *char1);
197void start_character_turning(CharacterInfo *chinf,
int useloop,
int no_diagonal);
198void fix_player_sprite(MoveList *cmls, CharacterInfo *chinf);
200int has_hit_another_character(
int sourceChar);
201int doNextCharMoveStep(CharacterInfo *chi,
int &char_index, CharacterExtras *chex);
203bool is_char_walking_ndirect(CharacterInfo *chi);
204int find_nearest_walkable_area_within(
int *xx,
int *yy,
int range,
int step);
205void find_nearest_walkable_area(
int *xx,
int *yy);
206void FindReasonableLoopForCharacter(CharacterInfo *chap);
207void walk_or_move_character(CharacterInfo *chaa,
int x,
int y,
int blocking,
int direct,
bool isWalk);
208int wantMoveNow(CharacterInfo *chi, CharacterExtras *chex);
209void setup_player_character(
int charid);
210int GetCharacterFrameVolume(CharacterInfo *chi);
211Shared::Bitmap *GetCharacterImage(
int charid,
bool *is_original =
nullptr);
212CharacterInfo *GetCharacterAtScreen(
int xx,
int yy);
215void update_character_scale(
int charid);
216CharacterInfo *GetCharacterAtRoom(
int x,
int y);
218int is_pos_on_character(
int xx,
int yy);
219void get_char_blocking_rect(
int charid,
int *x1,
int *y1,
int *width,
int *y2);
221int is_char_in_blocking_rect(
int sourceChar,
int otherChar,
int *fromxptr,
int *cwidptr);
222int my_getpixel(Shared::Bitmap *blk,
int x,
int y);
223int check_click_on_character(
int xx,
int yy,
int mood);
224void _DisplaySpeechCore(
int chid,
const char *displbuf);
225void _DisplayThoughtCore(
int chid,
const char *displbuf);
226void _displayspeech(
const char *texx,
int aschar,
int xx,
int yy,
int widd,
int isThought);
227int get_character_currently_talking();
228void DisplaySpeech(
const char *texx,
int aschar);
229int update_lip_sync(
int talkview,
int talkloop,
int *talkframeptr);
232void restore_characters();
236Rect GetCharacterRoomBBox(
int charid,
bool use_frame_0 =
false);
240PViewport FindNearestViewport(
int charid);
243extern int turnlooporder[8];