aboutsummaryrefslogtreecommitdiff
path: root/engines/hopkins/lines.h
blob: b9ae3e6e31cd8db464f07ebad99ff2e4cf705bce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
/* 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 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 *
 */

#ifndef HOPKINS_LINES_H
#define HOPKINS_LINES_H

#include "common/scummsys.h"
#include "common/str.h"

namespace Hopkins {

class HopkinsEngine;

struct LigneZoneItem {
	int _count;
	int _bobZoneIdx;
	int16 *_zoneData;
};

struct LigneItem {
	int _lineDataEndIdx;
	int _direction;
	int field6;
	int field8;
	int16 *_lineData;
};

struct SmoothItem {
	int _posX;
	int _posY;
};

struct SegmentItem {
	int _minZoneLineIdx;
	int _maxZoneLineIdx;
};

struct SquareZoneItem {
	int _enabledFl;
	int _left;
	int _right;
	int _top;
	int _bottom;
	int _minZoneLineIdx;
	int _maxZoneLineIdx;
	bool _squareZoneFl;
};

struct ZonePItem {
	int _destX;
	int _destY;
	int _spriteIndex;
	int field6;
	int field7;
	int field8;
	int field9;
	int fieldA;
	int fieldB;
	int fieldC;
	int fieldD;
	int fieldE;
	int fieldF;
	bool _enabledFl;
	int field12;
};

class LinesManager {
private:
	HopkinsEngine *_vm;

	int _pathFindingMaxDepth;
	SmoothItem _smoothRoute[4000];
	int NV_LIGNEDEP;
	int NV_LIGNEOFS;
	int NV_POSI;
	int NVPX;
	int NVPY;
	int _smoothMoveDirection;
	int16 super_parcours[32002];
	byte *BUFFERTAPE;
	int16 *essai0;
	int16 *essai1;
	int16 *BufLig;
	LigneZoneItem _zoneLine[401];
	LigneItem Ligne[400];
	SegmentItem _segment[101];
	SquareZoneItem _squareZone[101];
	int _currentSegmentId;
	int _maxLineIdx;
	int _lastLine;
	int _linesNumb;

	int checkInventoryHotspotsRow(int posX, int minZoneNum, bool lastRow);
	void removeZoneLine(int idx);
	void removeLine(int idx);
	bool checkCollisionLine(int xp, int yp, int *foundDataIdx, int *foundLineIdx, int startLineIdx, int endLineIdx);
	bool checkSmoothMove(int fromX, int fromY, int destX, int destY);
	bool makeSmoothMove(int fromX, int fromY, int destX, int destY);

	int CALC_PROPRE(int idx);
	int CONTOURNE1(int a1, int a2, int a3, int a4, int a5, int16 *route, int a7, int a8, int a9);
	int CONTOURNE(int a1, int a2, int a3, int a4, int a5, int16 *route, int a7);
	bool MIRACLE(int a1, int a2, int a3, int a4, int a5);
	int GENIAL(int lineIdx, int dataIdx, int a3, int a4, int a5, int a6, int a7, int16 *route, int a9);
	int PARC_PERS(int fromX, int fromY, int destX, int destY, int a5, int a6, int a7);
	bool PLAN_TEST(int paramX, int paramY, int a3, int a4, int a5);
	int TEST_LIGNE(int paramX, int paramY, int *a3, int *foundLineIdx, int *foundDataIdx);
	int colision(int xp, int yp);

public:
	int16 *_route;
	int16 *essai2;

	int BOBZONE[105];
	bool BOBZONE_FLAG[105];
	ZonePItem ZONEP[106];

	LinesManager();
	~LinesManager();
	void setParent(HopkinsEngine *vm);
	void clearAll();

	void setMaxLineIdx(int idx);
	int checkInventoryHotspots(int posX, int posY);
	void addZoneLine(int idx, int a2, int a3, int a4, int a5, int bobZoneIdx);
	void loadLines(const Common::String &file);
	void addLine(int idx, int direction, int a3, int a4, int a5, int a6);
	void initRoute();
	int16 *cityMapCarRoute(int x1, int y1, int x2, int y2);
	void clearAllZones();
	void resetLines();
	void resetLinesNumb();
	void resetLastLine();
	void enableZone(int idx);
	void disableZone(int idx);
	void checkZone();

	int MZONE();
	void CARRE_ZONE();
	int16 *PARCOURS2(int fromX, int fromY, int destX, int destY);
	void PACOURS_PROPRE(int16 *route);
};

} // End of namespace Hopkins

#endif /* HOPKINS_FONT_H */