summaryrefslogtreecommitdiffstats
path: root/src/object/object.h
blob: 88eac3de30959c79977c043ea27c5078b4416166 (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
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
// * This file is part of the COLOBOT source code
// * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch
// *
// * 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/.

// object.h

#pragma once


#include "graphics/d3d/d3dengine.h"
#include "graphics/common/camera.h"
#include "sound/sound.h"


class CInstanceManager;
class CLight;
class CTerrain;
class CWater;
class CParticule;
class CPhysics;
class CBrain;
class CMotion;
class CAuto;
class CDisplayText;
class CRobotMain;
class CBotVar;
class CScript;



// The father of all parts must always be the part number zero!

const int OBJECTMAXPART			= 40;
const int MAXCRASHSPHERE		= 40;
const int OBJECTMAXDESELLIST	= 10;
const int OBJECTMAXINFO			= 10;
const int OBJECTMAXCMDLINE		= 20;

enum ObjectType
{
	OBJECT_NULL		= 0,	// object destroyed
	OBJECT_FIX		= 1,	// stationary scenery
	OBJECT_PORTICO	    	= 2,	// gantry
	OBJECT_BASE		= 3,	// great main base
	OBJECT_DERRICK	    	= 4,	// derrick set
	OBJECT_FACTORY	    	= 5,	// factory set
	OBJECT_STATION	   	= 6,	// recharging station
	OBJECT_CONVERT	   	= 7,	// converter station
	OBJECT_REPAIR	   	= 8,	// reparation
	OBJECT_TOWER	    	= 9,	// defense tower
	OBJECT_NEST		= 10,	// nest
	OBJECT_RESEARCH     	= 11,	// research center
	OBJECT_RADAR	    	= 12,	// radar
	OBJECT_ENERGY	    	= 13,	// energy factory
	OBJECT_LABO		= 14,	// analytical laboratory for insect
	OBJECT_NUCLEAR		= 15,	// nuclear power plant
	OBJECT_START		= 16,	// starting
	OBJECT_END		= 17,	// finish
	OBJECT_INFO		= 18,	// information terminal
	OBJECT_PARA		= 19,	// lightning conductor
	OBJECT_TARGET1		= 20,	// gate target
	OBJECT_TARGET2		= 21,	// center target
	OBJECT_SAFE		= 22,	// safe
	OBJECT_HUSTON		= 23,	// control centre
	OBJECT_DESTROYER	= 24,	// destroyer
	OBJECT_FRET		= 30,	// transportable
	OBJECT_STONE	   	= 31,	// stone
	OBJECT_URANIUM	   	= 32,	// uranium
	OBJECT_METAL	   	= 33,	// metal
	OBJECT_POWER	   	= 34,	// normal battery
	OBJECT_ATOMIC	    	= 35,	// atomic battery
	OBJECT_BULLET	    	= 36,	// bullet
	OBJECT_BBOX		= 37,	// black-box
	OBJECT_TNT		= 38,	// box of TNT
	OBJECT_SCRAP1		= 40,	// metal waste
	OBJECT_SCRAP2		= 41,	// metal waste
	OBJECT_SCRAP3		= 42,	// metal waste
	OBJECT_SCRAP4		= 43,	// plastic waste
	OBJECT_SCRAP5		= 44,	// plastic waste
	OBJECT_MARKPOWER	= 50,	// mark underground energy source
	OBJECT_MARKSTONE	= 51,	// mark underground ore
	OBJECT_MARKURANIUM  	= 52,	// mark underground uranium
	OBJECT_MARKKEYa		= 53,	// mark underground key
	OBJECT_MARKKEYb		= 54,	// mark underground key
	OBJECT_MARKKEYc		= 55,	// mark underground key
	OBJECT_MARKKEYd		= 56,	// mark underground key
	OBJECT_BOMB		= 60,	// bomb
	OBJECT_WINFIRE		= 61,	// fireworks
	OBJECT_SHOW		= 62,	// shows a place
	OBJECT_BAG		= 63,	// survival bag
	OBJECT_PLANT0		= 70,	// plant 0
	OBJECT_PLANT1		= 71,	// plant 1
	OBJECT_PLANT2		= 72,	// plant 2
	OBJECT_PLANT3		= 73,	// plant 3
	OBJECT_PLANT4		= 74,	// plant 4
	OBJECT_PLANT5		= 75,	// plant 5
	OBJECT_PLANT6		= 76,	// plant 6
	OBJECT_PLANT7		= 77,	// plant 7
	OBJECT_PLANT8		= 78,	// plant 8
	OBJECT_PLANT9		= 79,	// plant 9
	OBJECT_PLANT10		= 80,	// plant 10
	OBJECT_PLANT11		= 81,	// plant 11
	OBJECT_PLANT12		= 82,	// plant 12
	OBJECT_PLANT13		= 83,	// plant 13
	OBJECT_PLANT14		= 84,	// plant 14
	OBJECT_PLANT15		= 85,	// plant 15
	OBJECT_PLANT16		= 86,	// plant 16
	OBJECT_PLANT17		= 87,	// plant 17
	OBJECT_PLANT18		= 88,	// plant 18
	OBJECT_PLANT19		= 89,	// plant 19
	OBJECT_TREE0		= 90,	// tree 0
	OBJECT_TREE1		= 91,	// tree 1
	OBJECT_TREE2		= 92,	// tree 2
	OBJECT_TREE3		= 93,	// tree 3
	OBJECT_TREE4		= 94,	// tree 4
	OBJECT_TREE5		= 95,	// tree 5
	OBJECT_TREE6		= 96,	// tree 6
	OBJECT_TREE7		= 97,	// tree 7
	OBJECT_TREE8		= 98,	// tree 8
	OBJECT_TREE9		= 99,	// tree 9
	OBJECT_MOBILEwt	   	= 100,	// wheel-trainer
	OBJECT_MOBILEtt	    	= 101,	// track-trainer
	OBJECT_MOBILEft	    	= 102,	// fly-trainer
	OBJECT_MOBILEit	    	= 103,	// insect-trainer
	OBJECT_MOBILEwa	    	= 110,	// wheel-arm
	OBJECT_MOBILEta	    	= 111,	// track-arm
	OBJECT_MOBILEfa	    	= 112,	// fly-arm
	OBJECT_MOBILEia	    	= 113,	// insect-arm
	OBJECT_MOBILEwc	    	= 120,	// wheel-cannon
	OBJECT_MOBILEtc	    	= 121,	// track-cannon
	OBJECT_MOBILEfc	    	= 122,	// fly-cannon
	OBJECT_MOBILEic	    	= 123,	// insect-cannon
	OBJECT_MOBILEwi	    	= 130,	// wheel-insect-cannon
	OBJECT_MOBILEti	    	= 131,	// track-insect-cannon
	OBJECT_MOBILEfi	    	= 132,	// fly-insect-cannon
	OBJECT_MOBILEii	    	= 133,	// insect-insect-cannon
	OBJECT_MOBILEws	    	= 140,	// wheel-search
	OBJECT_MOBILEts	    	= 141,	// track-search
	OBJECT_MOBILEfs	    	= 142,	// fly-search
	OBJECT_MOBILEis	    	= 143,	// insect-search
	OBJECT_MOBILErt	    	= 200,	// roller-terraform
	OBJECT_MOBILErc	    	= 201,	// roller-canon
	OBJECT_MOBILErr	    	= 202,	// roller-recover
	OBJECT_MOBILErs	    	= 203,	// roller-shield
	OBJECT_MOBILEsa	    	= 210,	// submarine
	OBJECT_MOBILEtg	    	= 211,	// training target
	OBJECT_MOBILEdr	    	= 212,	// robot drawing
	OBJECT_WAYPOINT 	= 250,	// waypoint
	OBJECT_FLAGb		= 260,	// blue flag
	OBJECT_FLAGr		= 261,	// red flag
	OBJECT_FLAGg		= 262,	// green flag
	OBJECT_FLAGy		= 263,	// yellow flag
	OBJECT_FLAGv		= 264,	// violet flag
	OBJECT_KEYa		= 270,	// key a
	OBJECT_KEYb		= 271,	// key b
	OBJECT_KEYc		= 272,	// key c
	OBJECT_KEYd		= 273,	// key d
	OBJECT_HUMAN	    	= 300,	// human
	OBJECT_TOTO		= 301,	// toto
	OBJECT_TECH		= 302,	// technician
	OBJECT_BARRIER0		= 400,	// barrier
	OBJECT_BARRIER1		= 401,	// barrier
	OBJECT_BARRIER2		= 402,	// barrier
	OBJECT_BARRIER3		= 403,	// barrier
	OBJECT_BARRIER4		= 404,	// barrier
	OBJECT_MOTHER	    	= 500,	// insect queen
	OBJECT_EGG		= 501,	// egg
	OBJECT_ANT		= 502,	// ant
	OBJECT_SPIDER	    	= 503,	// spider
	OBJECT_BEE		= 504,	// bee
	OBJECT_WORM		= 505,	// worm
	OBJECT_RUINmobilew1 	= 600,	// ruin 1
	OBJECT_RUINmobilew2 	= 601,	// ruin 1
	OBJECT_RUINmobilet1 	= 602,	// ruin 2
	OBJECT_RUINmobilet2 	= 603,	// ruin 2
	OBJECT_RUINmobiler1 	= 604,	// ruin 3
	OBJECT_RUINmobiler2 	= 605,	// ruin 3
	OBJECT_RUINfactory  	= 606,	// ruin 4
	OBJECT_RUINdoor     	= 607,	// ruin 5
	OBJECT_RUINsupport  	= 608,	// ruin 6
	OBJECT_RUINradar    	= 609,	// ruin 7
	OBJECT_RUINconvert  	= 610,	// ruin 8
	OBJECT_RUINbase	    	= 611,	// ruin 9
	OBJECT_RUINhead	    	= 612,	// ruin 10
	OBJECT_TEEN0		= 620,	// toy
	OBJECT_TEEN1		= 621,	// toy
	OBJECT_TEEN2		= 622,	// toy
	OBJECT_TEEN3		= 623,	// toy
	OBJECT_TEEN4		= 624,	// toy
	OBJECT_TEEN5		= 625,	// toy
	OBJECT_TEEN6		= 626,	// toy
	OBJECT_TEEN7		= 627,	// toy
	OBJECT_TEEN8		= 628,	// toy
	OBJECT_TEEN9		= 629,	// toy
	OBJECT_TEEN10	    	= 630,	// toy
	OBJECT_TEEN11	    	= 631,	// toy
	OBJECT_TEEN12	    	= 632,	// toy
	OBJECT_TEEN13	    	= 633,	// toy
	OBJECT_TEEN14	    	= 634,	// toy
	OBJECT_TEEN15	    	= 635,	// toy
	OBJECT_TEEN16	    	= 636,	// toy
	OBJECT_TEEN17	    	= 637,	// toy
	OBJECT_TEEN18	    	= 638,	// toy
	OBJECT_TEEN19	    	= 639,	// toy
	OBJECT_TEEN20	    	= 640,	// toy
	OBJECT_TEEN21	    	= 641,	// toy
	OBJECT_TEEN22	    	= 642,	// toy
	OBJECT_TEEN23	    	= 643,	// toy
	OBJECT_TEEN24	    	= 644,	// toy
	OBJECT_TEEN25	    	= 645,	// toy
	OBJECT_TEEN26	    	= 646,	// toy
	OBJECT_TEEN27	    	= 647,	// toy
	OBJECT_TEEN28	    	= 648,	// toy
	OBJECT_TEEN29	    	= 649,	// toy
	OBJECT_TEEN30	    	= 650,	// toy
	OBJECT_TEEN31	    	= 651,	// toy
	OBJECT_TEEN32	    	= 652,	// toy
	OBJECT_TEEN33	    	= 653,	// toy
	OBJECT_TEEN34	    	= 654,	// toy
	OBJECT_TEEN35	    	= 655,	// toy
	OBJECT_TEEN36	    	= 656,	// toy
	OBJECT_TEEN37	    	= 657,	// toy
	OBJECT_TEEN38	    	= 658,	// toy
	OBJECT_TEEN39	    	= 659,	// toy
	OBJECT_TEEN40	    	= 660,	// toy
	OBJECT_TEEN41	    	= 661,	// toy
	OBJECT_TEEN42	    	= 662,	// toy
	OBJECT_TEEN43	   	= 663,	// toy
	OBJECT_TEEN44	    	= 664,	// toy
	OBJECT_TEEN45	    	= 665,	// toy
	OBJECT_TEEN46	    	= 666,	// toy
	OBJECT_TEEN47	    	= 667,	// toy
	OBJECT_TEEN48	    	= 668,	// toy
	OBJECT_TEEN49	    	= 669,	// toy
	OBJECT_QUARTZ0		= 700,	// crystal 0
	OBJECT_QUARTZ1		= 701,	// crystal 1
	OBJECT_QUARTZ2		= 702,	// crystal 2
	OBJECT_QUARTZ3		= 703,	// crystal 3
	OBJECT_QUARTZ4		= 704,	// crystal 4
	OBJECT_QUARTZ5		= 705,	// crystal 5
	OBJECT_QUARTZ6		= 706,	// crystal 6
	OBJECT_QUARTZ7		= 707,	// crystal 7
	OBJECT_QUARTZ8		= 708,	// crystal 8
	OBJECT_QUARTZ9		= 709,	// crystal 9
	OBJECT_ROOT0		= 710,	// root 0
	OBJECT_ROOT1		= 711,	// root 1
	OBJECT_ROOT2		= 712,	// root 2
	OBJECT_ROOT3		= 713,	// root 3
	OBJECT_ROOT4		= 714,	// root 4
	OBJECT_ROOT5		= 715,	// root 5
	OBJECT_ROOT6		= 716,	// root 6
	OBJECT_ROOT7		= 717,	// root 7
	OBJECT_ROOT8		= 718,	// root 8
	OBJECT_ROOT9		= 719,	// root 9
	OBJECT_SEAWEED0		= 720,	// seaweed 0
	OBJECT_SEAWEED1		= 721,	// seaweed 1
	OBJECT_SEAWEED2		= 722,	// seaweed 2
	OBJECT_SEAWEED3		= 723,	// seaweed 3
	OBJECT_SEAWEED4		= 724,	// seaweed 4
	OBJECT_SEAWEED5		= 725,	// seaweed 5
	OBJECT_SEAWEED6		= 726,	// seaweed 6
	OBJECT_SEAWEED7		= 727,	// seaweed 7
	OBJECT_SEAWEED8		= 728,	// seaweed 8
	OBJECT_SEAWEED9		= 729,	// seaweed 9
	OBJECT_MUSHROOM0	= 730,	// mushroom 0
	OBJECT_MUSHROOM1	= 731,	// mushroom 1
	OBJECT_MUSHROOM2	= 732,	// mushroom 2
	OBJECT_MUSHROOM3	= 733,	// mushroom 3
	OBJECT_MUSHROOM4	= 734,	// mushroom 4
	OBJECT_MUSHROOM5	= 735,	// mushroom 5
	OBJECT_MUSHROOM6	= 736,	// mushroom 6
	OBJECT_MUSHROOM7	= 737,	// mushroom 7
	OBJECT_MUSHROOM8	= 738,	// mushroom 8
	OBJECT_MUSHROOM9	= 739,	// mushroom 9
	OBJECT_APOLLO1		= 900,	// apollo lem
	OBJECT_APOLLO2		= 901,	// apollo jeep
	OBJECT_APOLLO3		= 902,	// apollo flag
	OBJECT_APOLLO4		= 903,	// apollo module
	OBJECT_APOLLO5		= 904,	// apollo antenna
	OBJECT_HOME1		= 910,	// home 1
	OBJECT_MAX		= 1000,
};

enum ObjectMaterial
{
	OM_METAL		= 0,	// metal
	OM_PLASTIC		= 1,	// plastic
	OM_HUMAN		= 2,	// cosmonaut
	OM_ANIMAL		= 3,	// insect
	OM_VEGETAL		= 4,	// plant
	OM_MINERAL		= 5,	// stone
};

struct ObjectPart
{
	char		bUsed;
	int		object;			// number of the object in CD3DEngine
	int		parentPart;		// number of father part
	int		masterParti;		// master canal of the particle
	D3DVECTOR	position;
	D3DVECTOR	angle;
	D3DVECTOR	zoom;
	char		bTranslate;
	char		bRotate;
	char		bZoom;
	D3DMATRIX	matTranslate;
	D3DMATRIX	matRotate;
	D3DMATRIX	matTransform;
	D3DMATRIX	matWorld;
};

struct Character
{
	float		wheelFront;		// position X of the front wheels
	float		wheelBack;		// position X of the back wheels
	float		wheelLeft;		// position Z of the left wheels
	float		wheelRight;		// position Z of the right wheels
	float		height;			// normal height on top of ground
	D3DVECTOR	posPower;		// position of the battery
};

struct Info
{
	char		name[20];		// name of the information
	float		value;			// value of the information
};

enum ExploType
{
	EXPLO_BOUM		= 1,
	EXPLO_BURN		= 2,
	EXPLO_WATER		= 3,
};

enum ResetCap
{
	RESET_NONE		= 0,
	RESET_MOVE		= 1,
	RESET_DELETE	= 2,
};

enum RadarFilter
{
	FILTER_NONE			= 0,
	FILTER_ONLYLANDING	= 1,
	FILTER_ONLYFLYING	= 2,
};




class CObject
{
public:
	CObject(CInstanceManager* iMan);
	~CObject();

	void		DeleteObject(bool bAll=false);
	void		Simplify();
	bool		ExploObject(ExploType type, float force, float decay=1.0f);

	bool		EventProcess(const Event &event);
	void		UpdateMapping();

	int			CreatePart();
	void		DeletePart(int part);
	void		SetObjectRank(int part, int objRank);
	int			RetObjectRank(int part);
	void		SetObjectParent(int part, int parent);
	void		SetType(ObjectType type);
	ObjectType	RetType();
	char*		RetName();
	void		SetOption(int option);
	int			RetOption();

	void		SetID(int id);
	int			RetID();

	bool		Write(char *line);
	bool		Read(char *line);

	void		SetDrawWorld(bool bDraw);
	void		SetDrawFront(bool bDraw);

	bool		CreateVehicle(D3DVECTOR pos, float angle, ObjectType type, float power, bool bTrainer, bool bToy);
	bool		CreateInsect(D3DVECTOR pos, float angle, ObjectType type);
	bool		CreateBuilding(D3DVECTOR pos, float angle, float height, ObjectType type, float power=1.0f);
	bool		CreateResource(D3DVECTOR pos, float angle, ObjectType type, float power=1.0f);
	bool		CreateFlag(D3DVECTOR pos, float angle, ObjectType type);
	bool		CreateBarrier(D3DVECTOR pos, float angle, float height, ObjectType type);
	bool		CreatePlant(D3DVECTOR pos, float angle, float height, ObjectType type);
	bool		CreateMushroom(D3DVECTOR pos, float angle, float height, ObjectType type);
	bool		CreateTeen(D3DVECTOR pos, float angle, float zoom, float height, ObjectType type);
	bool		CreateQuartz(D3DVECTOR pos, float angle, float height, ObjectType type);
	bool		CreateRoot(D3DVECTOR pos, float angle, float height, ObjectType type);
	bool		CreateHome(D3DVECTOR pos, float angle, float height, ObjectType type);
	bool		CreateRuin(D3DVECTOR pos, float angle, float height, ObjectType type);
	bool		CreateApollo(D3DVECTOR pos, float angle, ObjectType type);

	bool		ReadProgram(int rank, char* filename);
	bool		WriteProgram(int rank, char* filename);
	bool		RunProgram(int rank);

	int			RetShadowLight();
	int			RetEffectLight();

	void		FlushCrashShere();
	int			CreateCrashSphere(D3DVECTOR pos, float radius, Sound sound, float hardness=0.45f);
	int			RetCrashSphereTotal();
	bool		GetCrashSphere(int rank, D3DVECTOR &pos, float &radius);
	float		RetCrashSphereHardness(int rank);
	Sound		RetCrashSphereSound(int rank);
	void		DeleteCrashSphere(int rank);
	void		SetGlobalSphere(D3DVECTOR pos, float radius);
	void		GetGlobalSphere(D3DVECTOR &pos, float &radius);
	void		SetJotlerSphere(D3DVECTOR pos, float radius);
	void		GetJotlerSphere(D3DVECTOR &pos, float &radius);
	void		SetShieldRadius(float radius);
	float		RetShieldRadius();

	void		SetFloorHeight(float height);
	void		FloorAdjust();

	void		SetLinVibration(D3DVECTOR dir);
	D3DVECTOR	RetLinVibration();
	void		SetCirVibration(D3DVECTOR dir);
	D3DVECTOR	RetCirVibration();
	void		SetInclinaison(D3DVECTOR dir);
	D3DVECTOR	RetInclinaison();

	void		SetPosition(int part, const D3DVECTOR &pos);
	D3DVECTOR	RetPosition(int part);
	void		SetAngle(int part, const D3DVECTOR &angle);
	D3DVECTOR	RetAngle(int part);
	void		SetAngleY(int part, float angle);
	void		SetAngleX(int part, float angle);
	void		SetAngleZ(int part, float angle);
	float		RetAngleY(int part);
	float		RetAngleX(int part);
	float		RetAngleZ(int part);
	void		SetZoom(int part, float zoom);
	void		SetZoom(int part, D3DVECTOR zoom);
	D3DVECTOR	RetZoom(int part);
	void		SetZoomX(int part, float zoom);
	float		RetZoomX(int part);
	void		SetZoomY(int part, float zoom);
	float		RetZoomY(int part);
	void		SetZoomZ(int part, float zoom);
	float		RetZoomZ(int part);

	float		RetWaterLevel();

	void		SetTrainer(bool bEnable);
	bool		RetTrainer();

	void		SetToy(bool bEnable);
	bool		RetToy();

	void		SetManual(bool bManual);
	bool		RetManual();

	void		SetResetCap(ResetCap cap);
	ResetCap	RetResetCap();
	void		SetResetBusy(bool bBusy);
	bool		RetResetBusy();
	void		SetResetPosition(const D3DVECTOR &pos);
	D3DVECTOR	RetResetPosition();
	void		SetResetAngle(const D3DVECTOR &angle);
	D3DVECTOR	RetResetAngle();
	void		SetResetRun(int run);
	int			RetResetRun();

	void		SetMasterParticule(int part, int parti);
	int			RetMasterParticule(int part);

	void		SetPower(CObject* power);
	CObject*	RetPower();
	void		SetFret(CObject* fret);
	CObject*	RetFret();
	void		SetTruck(CObject* truck);
	CObject*	RetTruck();
	void		SetTruckPart(int part);
	int			RetTruckPart();

	void		InfoFlush();
	void		DeleteInfo(int rank);
	void		SetInfo(int rank, Info info);
	Info		RetInfo(int rank);
	int			RetInfoTotal();
	void		SetInfoReturn(float value);
	float		RetInfoReturn();
	void		SetInfoUpdate(bool bUpdate);
	bool		RetInfoUpdate();

	bool		SetCmdLine(int rank, float value);
	float		RetCmdLine(int rank);

	D3DMATRIX*	RetRotateMatrix(int part);
	D3DMATRIX*	RetTranslateMatrix(int part);
	D3DMATRIX*	RetTransformMatrix(int part);
	D3DMATRIX*	RetWorldMatrix(int part);

	void		SetViewFromHere(D3DVECTOR &eye, float &dirH, float &dirV, D3DVECTOR	&lookat, D3DVECTOR &upVec, CameraType type);

	void		SetCharacter(Character* character);
	void		GetCharacter(Character* character);
	Character*	RetCharacter();

	float		RetAbsTime();

	void		SetEnergy(float level);
	float		RetEnergy();

	void		SetCapacity(float capacity);
	float		RetCapacity();

	void		SetShield(float level);
	float		RetShield();

	void		SetRange(float delay);
	float		RetRange();

	void		SetTransparency(float value);
	float		RetTransparency();

	ObjectMaterial RetMaterial();

	void		SetGadget(bool bMode);
	bool		RetGadget();

	void		SetFixed(bool bFixed);
	bool		RetFixed();

	void		SetClip(bool bClip);
	bool		RetClip();

	bool		JostleObject(float force);

	void		StartDetectEffect(CObject *target, bool bFound);

	void		SetVirusMode(bool bEnable);
	bool		RetVirusMode();
	float		RetVirusTime();

	void		SetCameraType(CameraType type);
	CameraType	RetCameraType();
	void		SetCameraDist(float dist);
	float		RetCameraDist();
	void		SetCameraLock(bool bLock);
	bool		RetCameraLock();

	void		SetHilite(bool bMode);
	bool		RetHilite();

	void		SetSelect(bool bMode, bool bDisplayError=true);
	bool		RetSelect(bool bReal=false);

	void		SetSelectable(bool bMode);
	bool		RetSelectable();

	void		SetActivity(bool bMode);
	bool		RetActivity();

	void		SetVisible(bool bVisible);
	bool		RetVisible();

	void		SetEnable(bool bEnable);
	bool		RetEnable();

	void		SetCheckToken(bool bMode);
	bool		RetCheckToken();

	void		SetProxyActivate(bool bActivate);
	bool		RetProxyActivate();
	void		SetProxyDistance(float distance);
	float		RetProxyDistance();

	void		SetMagnifyDamage(float factor);
	float		RetMagnifyDamage();

	void		SetParam(float value);
	float		RetParam();

	void		SetExplo(bool bExplo);
	bool		RetExplo();
	void		SetLock(bool bLock);
	bool		RetLock();
	void		SetCargo(bool bCargo);
	bool		RetCargo();
	void		SetBurn(bool bBurn);
	bool		RetBurn();
	void		SetDead(bool bDead);
	bool		RetDead();
	bool		RetRuin();
	bool		RetActif();

	void		SetGunGoalV(float gunGoal);
	void		SetGunGoalH(float gunGoal);
	float		RetGunGoalV();
	float		RetGunGoalH();

	bool		StartShowLimit();
	void		StopShowLimit();

	bool		IsProgram();
	void		CreateSelectParticule();

	void		SetRunScript(CScript* script);
	CScript*	RetRunScript();
	CBotVar*	RetBotVar();
	CPhysics*	RetPhysics();
	CBrain*		RetBrain();
	CMotion*	RetMotion();
	CAuto*		RetAuto();
	void		SetAuto(CAuto* automat);

	void		SetDefRank(int rank);
	int			RetDefRank();

	bool		GetTooltipName(char* name);

	void		AddDeselList(CObject* pObj);
	CObject*	SubDeselList();
	void		DeleteDeselList(CObject* pObj);

	bool		CreateShadowCircle(float radius, float intensity, D3DShadowType type=D3DSHADOWNORM);
	bool		CreateShadowLight(float height, D3DCOLORVALUE color);
	bool		CreateEffectLight(float height, D3DCOLORVALUE color);

	void		FlatParent();

	bool		RetTraceDown();
	void		SetTraceDown(bool bDown);
	int			RetTraceColor();
	void		SetTraceColor(int color);
	float		RetTraceWidth();
	void		SetTraceWidth(float width);

protected:
	bool		EventFrame(const Event &event);
	void		VirusFrame(float rTime);
	void		PartiFrame(float rTime);
	void		CreateOtherObject(ObjectType type);
	void		InitPart(int part);
	void		UpdateTotalPart();
	int			SearchDescendant(int parent, int n);
	void		UpdateEnergyMapping();
	bool		UpdateTransformObject(int part, bool bForceUpdate);
	bool		UpdateTransformObject();
	void		UpdateSelectParticule();

protected:
	CInstanceManager* m_iMan;
	CD3DEngine*		m_engine;
	CLight*			m_light;
	CTerrain*		m_terrain;
	CWater*			m_water;
	CCamera*		m_camera;
	CParticule*		m_particule;
	CPhysics*		m_physics;
	CBrain*			m_brain;
	CMotion*		m_motion;
	CAuto*			m_auto;
	CDisplayText*	m_displayText;
	CRobotMain*		m_main;
	CSound*			m_sound;
	CBotVar*		m_botVar;
	CScript*		m_runScript;

	ObjectType	m_type;				// OBJECT_*
	int		m_id;				// unique identifier
	char		m_name[50];			// name of the object
	Character	m_character;			// characteristic
	int		m_option;			// option
	int		m_partiReactor;			// number of the particle of the reactor
	int		m_shadowLight;			// number of light from the shadows
	float		m_shadowHeight;			// height of light from the shadows
	int		m_effectLight;			// number of light effects
	float		m_effectHeight;			// height of light effects
	D3DVECTOR	m_linVibration;			// linear vibration
	D3DVECTOR	m_cirVibration;			// circular vibration
	D3DVECTOR	m_inclinaison;			// tilt
	CObject*	m_power;			// battery used by the vehicle
	CObject*	m_fret;				// object transported
	CObject*	m_truck;			// object with the latter
	int		m_truckLink;			// part
	float		m_energy;			// energy contained (if battery)
	float		m_lastEnergy;
	float		m_capacity;			// capacity (if battery)
	float		m_shield;			// shield
	float		m_range;			// flight range
	float		m_transparency;			// transparency (0..1)
	int		m_material;			// matter(0..n)
	float		m_aTime;
	float		m_shotTime;			// time since last shot
	bool		m_bVirusMode;			// virus activated/triggered
	float		m_virusTime;			// lifetime of the virus
	float		m_lastVirusParticule;
	float		m_lastParticule;
	bool		m_bHilite;
	bool		m_bSelect;			// object selected
	bool		m_bSelectable;			// selectable object
	bool		m_bCheckToken;			// object with audited tokens
	bool		m_bVisible;			// object active but undetectable
	bool		m_bEnable;			// dead object
	bool		m_bProxyActivate;		// active object so close
	bool		m_bGadget;			// object nonessential
	bool		m_bLock;
	bool		m_bExplo;
	bool		m_bCargo;
	bool		m_bBurn;
	bool		m_bDead;
	bool		m_bFlat;
	bool		m_bTrainer;			// drive vehicle (without remote)
	bool		m_bToy;				// toy key
	bool		m_bManual;			// manual control (Scribbler)
	bool		m_bFixed;
	bool		m_bClip;
	bool		m_bShowLimit;
	float		m_showLimitRadius;
	float		m_gunGoalV;
	float		m_gunGoalH;
	CameraType	m_cameraType;
	float		m_cameraDist;
	bool		m_bCameraLock;
	int			m_defRank;
	float		m_magnifyDamage;
	float		m_proxyDistance;
	float		m_param;

	int			m_crashSphereUsed;	// number of spheres used
	D3DVECTOR	m_crashSpherePos[MAXCRASHSPHERE];
	float		m_crashSphereRadius[MAXCRASHSPHERE];
	float		m_crashSphereHardness[MAXCRASHSPHERE];
	Sound		m_crashSphereSound[MAXCRASHSPHERE];
	D3DVECTOR	m_globalSpherePos;
	float		m_globalSphereRadius;
	D3DVECTOR	m_jotlerSpherePos;
	float		m_jotlerSphereRadius;
	float		m_shieldRadius;

	int			m_totalPart;
	ObjectPart	m_objectPart[OBJECTMAXPART];

	int			m_totalDesectList;
	CObject*	m_objectDeselectList[OBJECTMAXDESELLIST];

	int			m_partiSel[4];

	ResetCap	m_resetCap;
	bool		m_bResetBusy;
	D3DVECTOR	m_resetPosition;
	D3DVECTOR	m_resetAngle;
	int			m_resetRun;

	int			m_infoTotal;
	Info		m_info[OBJECTMAXINFO];
	float		m_infoReturn;
	bool		m_bInfoUpdate;

	float		m_cmdLine[OBJECTMAXCMDLINE];
};