00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _LIBNLTRACK_H_
00019 #define _LIBNLTRACK_H_
00020
00021 #include <sys/stat.h>
00022 #include <stdio.h>
00023 #include <stdlib.h>
00024 #include <string.h>
00025
00026
00027 typedef struct
00028 {
00029 float x, y, z;
00030 } Vertex;
00031
00032
00033 typedef struct
00034 {
00035 int a,r,g,b;
00036 } Color;
00037
00038
00039 typedef struct
00040 {
00041 int useIndividualColor;
00042 char *textureFilename;
00043 Color seatColor, restraintColor, trainColor, gearColor;
00044 } Train;
00045
00046
00047 typedef struct
00048 {
00049 float posX, posY, posZ;
00050 float cp1X, cp1Y, cp1Z;
00051 float cp2X, cp2Y, cp2Z;
00052 float roll;
00053 int continuesRoll, equalDistanceCP, relativeRoll;
00054 } Bezier;
00055
00056 typedef struct
00057 {
00058 int type;
00059 float pos;
00060 } SegmentNode;
00061
00062 typedef struct
00063 {
00064 int totalRASCs;
00065 SegmentNode *data;
00066 } SegmentNodes;
00067
00068
00069
00070 typedef struct
00071 {
00072 int useSizeValue;
00073 float size;
00074 int useRotationValue;
00075 float rotation;
00076 char fundType;
00077 int flags;
00078 float posX, posY, posZ;
00079 } FundNode;
00080
00081
00082 typedef struct
00083 {
00084 float posX, posY, posZ;
00085 int flags;
00086 } FreeNode;
00087
00088
00089 typedef struct
00090 {
00091 int n1type, n1segIndex, n1index;
00092 int n2type, n2segIndex, n2index;
00093 int tubeType, flags;
00094 float rotation;
00095 } Tube;
00096
00097
00098 typedef struct
00099 {
00100 char *dummyString, *objectFilename;
00101 float
00102 _11, _12, _13, _14,
00103 _21, _22, _23, _24,
00104 _31, _32, _33, _34,
00105 _41, _42, _43, _44
00106 ;
00107 } SCOBObject;
00108
00109
00110 typedef struct
00111 {
00112 float posX, posY, posZ;
00113 int treeType;
00114 float rotation;
00115 } Tree;
00116
00117 typedef struct
00118 {
00119 char reserved;
00120 } SkipByte;
00121
00122 typedef struct Catwalk
00123 {
00124 int fn1index, fn2index, fn3index, fn4index;
00125 int flags, catwalkType, skipByteCount;
00126 SkipByte *skipBytes;
00127 } Catwalk;
00128
00129
00130 typedef struct
00131 {
00132 float waitAvg, waitMin, waitMax, waitDev;
00133 char entranceSide, stationType;
00134 int sync;
00135 char stationHidden;
00136 float mainBrakeDecel;
00137 char numPasses, reverseCableLift;
00138 int hideBreaks;
00139 int usePreBrake;
00140 float preBrakeSpeedLimit, preBrakeDecel, preBrakeHyster;
00141 int useTransportation;
00142 float transportSpeed, transportAccel, transportDecel;
00143 char transportType;
00144 float launchAccel;
00145 int useLaunch;
00146 } SegmentStation;
00147
00148
00149 typedef struct
00150 {
00151 char liftStyle;
00152 float speed, accel, decel;
00153 int railingLeft, railingRight;
00154 int flags;
00155 } SegmentLift;
00156
00157
00158 typedef struct
00159 {
00160 float speed, accel, decel;
00161 char transportStyle;
00162 int railingLeft, railingRight;
00163 char speedUpPasses, speedDown;
00164 float speedDownSpeedLimit;
00165 } SegmentTransport;
00166
00167
00168 typedef struct
00169 {
00170 float speedLimit, decel, hyster;
00171 float triggerPos;
00172 int blockSegment, useTransport;
00173 float transportSpeed, transportAccel, transportDecel;
00174 int railingLeft, railingRight, completeStop;
00175 char stopWaitTime;
00176 int transportType;
00177 int launch;
00178 float launchAccel;
00179 int newTriggerBehaviour;
00180 } SegmentBreak;
00181
00182
00183 typedef struct
00184 {
00185 int size;
00186 int type;
00187 int individualTrackColor;
00188 Color trackSpineColor, trackRailColor, trackCrosstileColor;
00189 int useTunnel;
00190 int flags;
00191 SegmentStation station;
00192 SegmentLift lift;
00193 SegmentTransport transport;
00194 SegmentBreak breaks;
00195 } SEGMSegment;
00196
00197
00198 typedef struct
00199 {
00200
00201 int nlimsize;
00202 char major;
00203 char minor;
00204 char revision;
00205 char markup;
00206 char reserved;
00207 int use16friction;
00208
00209
00210 int trcksize;
00211 int style;
00212 int numTrains;
00213 int numCars;
00214
00215 Train *train;
00216 Color trackSpineColor, trackRailColor, trackCrosstieColor;
00217 Color supportsColor;
00218 Color trainSeatColor;
00219 Color trainRestraintColor;
00220 Color trainColor;
00221 Color trainGearColor;
00222 char reserved0, reserved1, reserved2, reserved3;
00223 int trackMode;
00224 int useTunnelColor;
00225 Color tunnelColor;
00226
00227
00228 int infosize;
00229 char *authorComments;
00230
00231
00232 int bezrsize;
00233 int numBeziers;
00234 Bezier *beziers;
00235
00236
00237 int segmsize;
00238 int totalSegments;
00239 int trackClosedCircuit;
00240 SEGMSegment *segs;
00241
00242
00243 int suppsize;
00244
00245
00246
00247 int fundsize;
00248 int totalFundNodes;
00249 FundNode *fundNodes;
00250
00251
00252 int rascsize;
00253 int totalSegment;
00254 SegmentNodes *seg;
00255
00256
00257 int frensize;
00258 int totalFreeNodes;
00259 FreeNode *freeNodes;
00260
00261
00262 int tubesize;
00263 int totalTubes;
00264 Tube *tubes;
00265
00266
00267 int catwsize;
00268 int totalCatwalks;
00269 Catwalk *catwalks;
00270
00271
00272 int scensize;
00273 int chunkscen;
00274 int totalTrees;
00275 Tree *trees;
00276
00277
00278 int scobsize;
00279 int totalObjects;
00280 SCOBObject *objects;
00281
00282
00283 int envcsize;
00284 char *envFilename, *reservedString;
00285
00286
00287 int terasize;
00288 int sizeX, sizeZ;
00289 float scaleX, scaleZ;
00290 char *groundTextureFilename;
00291 float numGroundTextureRepeats;
00292 char *detailTextureFilename;
00293 float numDetailTextureRepeats;
00294 int enableWater;
00295 float seaLevel;
00296 char *waterTextureFilename;
00297 float numWaterTextureRepeats;
00298 char waterReflectiveness;
00299 int useWaves;
00300 float waveScale;
00301 float terrainHeight[300][300];
00302 } NlTrack;
00303
00304
00305 #define LITTLE_ENDIAN_NL 0
00306 #define BIG_ENDIAN_NL 1
00307
00308
00309 #define NLIM 1
00310 #define TRCK 2
00311 #define INFO 3
00312 #define BEZR 4
00313 #define SEGM 5
00314 #define SUPP 6
00315 #define FUND 7
00316 #define RASC 8
00317 #define FREN 9
00318 #define TUBE 10
00319 #define CATW 11
00320 #define SCEN 12
00321 #define SCOB 13
00322 #define TERA 14
00323 #define ENVC 15
00324
00325
00326 #define CLASSIC_STEEL_LOOPING 0
00327 #define CORKSCREW_COASTER 1
00328 #define INVERTED_COASTER_2 2
00329 #define TWISTED_STEEL_COASTER 3
00330 #define INVERTED_COASTER_4 4
00331 #define HYPER_COASTER 5
00332 #define FLOORLESS_TWISTED_STEEL_COASTER 6
00333 #define STANDUP_TWISTED_STEEL_COASTER 7
00334 #define HYPER_COASTER_4 8
00335 #define WOODEN_COASTER_TRAILERED_2 9
00336 #define WOODEN_COASTER_CLASSIC_4 10
00337 #define WOODEN_COASTER_CLASSIC_6 11
00338 #define WOODEN_COASTER_TRAILERED_4 12
00339 #define LIM_LAUNCHED_COASTER 13
00340 #define INVERTED_FACE_TO_FACE_COASTER 14
00341 #define INVERTED_IMPULSE_COASTER 15
00342 #define VEKOMA_FLYING_DUTCHMAN 18
00343 #define MAURER_SOEHNE_SPINNING_COASTER 20
00344 #define GERSTLAUER_EURO_FIGHTER 36
00345 #define VEKOMA_MOTORBIKE_COASTER 38
00346 #define GERSTLAUER_BOBSLED_COASTER 39
00347 #define GERSTLAUER_SPINNING_COASTER 41
00348 #define GERSTLAUER_EURO_FIGHTER_2 47
00349 #define STEEL_LOOPING_COASTER 49
00350 #define VERKOMA_MINE_TRAIN_COASTER 34
00351 #define VERKOMA_MINE_TRAIN_COASTER_LOC 35
00352 #define MAURER_SOEHNE_X_CAR_COASTER 50
00353
00354
00355 #define SEGMENT_NORMAL 0
00356 #define SEGMENT_STATION 1
00357 #define SEGMENT_LIFT 2
00358 #define SEGMENT_TRANSPORT 3
00359 #define SEGMENT_BREAK 4
00360 #define SEGMENT_UNKNOWN 5
00361
00362
00363 #define NODE_FUND 1
00364 #define NODE_FREE 2
00365 #define NODE_SEGMENT 3
00366
00367
00368 #define RASC_TRACK_NODE 0
00369 #define RASC_NONE 1
00370 #define RASC_SINGLE 2
00371 #define RASC_COMPLEX 3
00372 #define RASC_INVERTED 4
00373 #define RASC_90_BANK 5
00374 #define RASC_SMALL_INVERTED 6
00375 #define RASC_SHAPE 7
00376 #define RASC_LOOPING_BOX 8
00377
00378
00379 #define TUBE_MEDIUM 0
00380 #define TUBE_LARGE 1
00381 #define TUBE_SMALL 2
00382 #define TUBE_L_BEAM 3
00383 #define TUBE_H_BEAM 4
00384 #define TUBE_X_WOOD 5
00385 #define TUBE_XX_LARGE 6
00386 #define TUBE_4_4_WOOD_BEAM 7
00387 #define TUBE_1_4_WOOD_BEAM 8
00388 #define TUBE_2_2_WOOD_BEAM 9
00389
00390
00391 #define MODE_NORMAL 0
00392 #define MODE_SHUTTLE 1
00393
00394 #define toRad(value) value / 57.29577951
00395
00396
00397
00398
00399 void swap( char* v1, char* v2 );
00400
00401
00402
00403
00404 void SwapEndianFloat( float* val );
00405
00406
00407
00408
00409 void SwapEndianInt( int* val );
00410
00411
00412
00413
00414 int byteInt ( char data[3], int endian ) ;
00415
00416
00417
00418
00419 float byteFloat ( FILE *file, int endian ) ;
00420
00421
00422
00423
00424 long filelength(int f);
00425
00426
00427
00428
00429 char* ReadBytes( FILE *file, size_t length );
00430
00431
00432
00433
00434 char ReadByte( FILE *file );
00435
00436
00437
00438
00439 int ReadBool( FILE *file );
00440
00441
00442
00443
00444 int ReadKey( FILE *file );
00445
00446
00447
00448
00449 int ReadInt( FILE *file );
00450
00451
00452
00453
00454 float ReadFloat( FILE *file );
00455
00456
00457
00458
00459 void ReadNull( FILE *file , size_t length );
00460
00461
00462
00463
00464 char *ReadString( FILE *file, size_t length );
00465
00466
00467
00468
00469 Color ReadColor( FILE *file );
00470
00471
00472
00473
00474 int NlOpen( char *filename, NlTrack *Track);
00475 int NlSave( char *filename, NlTrack *Track);
00476
00477
00478
00479
00480 char *NlGetCoasterType(int type);
00481
00482
00483 int addBezier (float posX, float posY, float posZ, float cp1X, float cp1Y, float cp1Z, float cp2X, float cp2Y, float cp2Z, float roll, int continuesRoll, int equalDistanceCP, int relativeRoll, NlTrack *Track);
00484 void modifyBezier (int bezierindex, float posX, float posY, float posZ, float cp1X, float cp1Y, float cp1Z, float cp2X, float cp2Y, float cp2Z, float roll, int continuesRoll, int equalDistanceCP, int relativeRoll, NlTrack *Track);
00485 void deleteBezier (int bezierindex, NlTrack *Track);
00486 Bezier getBezier (int bezierindex, NlTrack *Track);
00487 int getNumBeziers (NlTrack *Track);
00488
00489
00490 int setEnvc (char *envFilename, char *reservedString, NlTrack *Track);
00491 char* getEnvFilename (NlTrack *Track);
00492 char* getReservedString (NlTrack *Track);
00493
00494 int addFreeNode (float posX, float posY, float posZ, NlTrack *Track);
00495 void modifyFreeNode (int nodeindex, float posX, float posY, float posZ, NlTrack *Track);
00496 void deleteFreeNode (int nodeindex, NlTrack *Track);
00497 FreeNode getFreeNode (int nodeindex, NlTrack *Track);
00498 int getTotalFreeNodes (NlTrack *Track);
00499
00500 int addFundNode (int useSizeValue, float size, int useRotationValue, float rotation, char fundType, int flags, float posX, float posY, float posZ, NlTrack *Track);
00501 FundNode getFundNode(int fundindex, NlTrack *Track);
00502 int modifyFundNode (int fundindex, int useSizeValue, float size, int useRotationValue, float rotation, char fundType, int flags, float posX, float posY, float posZ, NlTrack *Track);
00503 void deleteFundNode (int fundindex, NlTrack *Track);
00504 int getTotalFundNodes (NlTrack *Track);
00505
00506 void setAuthorComments (char *authorComments, NlTrack *Track);
00507 char * getAuthorComments (NlTrack *Track);
00508
00509 int initNewNlTrack (NlTrack *Track);
00510 void setCoasterStyle (int style, NlTrack *Track);
00511 int getCoasterStyle (NlTrack *Track);
00512 void setMajor (int major, NlTrack *Track);
00513 int getMajor (NlTrack *Track);
00514 void setMinor (int minor, NlTrack *Track);
00515 int getMinor (NlTrack *Track);
00516 void setRevision (int revision, NlTrack *Track);
00517 int getRevision (NlTrack *Track);
00518 void setMarkup (int markup, NlTrack *Track);
00519 int getMarkup (NlTrack *Track);
00520 void setUse16friction (int use16friction, NlTrack *Track);
00521 int getUse16friction (NlTrack *Track);
00522
00523 int addSegment (int segmenttype, int bezierindex, int individualTrackColor, Color trackSpineColor, Color trackRailColor, Color trackCrosstileColor, int useTunnel, int flags, NlTrack *Track);
00524 void modifySegment (int segmenttype, int bezierindex, int individualTrackColor, Color trackSpineColor, Color trackRailColor, Color trackCrosstileColor, int useTunnel, int flags, NlTrack *Track);
00525 SEGMSegment getSegment (int bezierindex, NlTrack *Track);
00526 void deleteSegment (int segmenttype, NlTrack *Track);
00527 int getTotalSegments (NlTrack *Track);
00528 void setSegmentStation (int bezierindex, float waitAvg, float waitMin, float waitMax, float waitDev, char entranceSide, char stationType, int sync, char stationHidden, float mainBrakeDecel, char numPasses, char reverseCableLift, int hideBreaks, int usePreBrake, float preBrakeSpeedLimit, float preBrakeDecel, float preBrakeHyster, int useTransportation, float transportSpeed, float transportAccel, float transportDecel, char transportType, float launchAccel, int useLaunch, NlTrack *Track);
00529 SegmentStation getSegmentStation (int bezierindex, NlTrack *Track);
00530 void setSegmentLift (int bezierindex, char liftStyle, float speed, float accel, float decel, int railingLeft, int railingRight, int flags, NlTrack *Track);
00531 SegmentLift getSegmentLift (int bezierindex, NlTrack *Track);
00532 void setSegmentTransport (int bezierindex, float speed, float accel, float decel, char transportStyle, int railingLeft, int railingRight, char speedUpPasses, char speedDown, float speedDownSpeedLimit, NlTrack *Track);
00533 SegmentTransport getSegmentTransport (int bezierindex, NlTrack *Track);
00534 void setSegmentBreak (int bezierindex, float speedLimit, float decel, float hyster, float triggerPos, int blockSegment, int useTransport, float transportSpeed, float transportAccel, float transportDecel, int railingLeft, int railingRight, int completeStop, char stopWaitTime, int transportType, int launch, float launchAccel, int newTriggerBehaviour, NlTrack *Track);
00535 SegmentBreak getSegmentBreak (int bezierindex, NlTrack *Track);
00536 Vertex getPosSegmentNode (int index, int segindex, NlTrack *Track);
00537
00538 Color createColorARGB (int a, int r, int g, int b);
00539 float toG (float index);
00540 float toNewton (float index);
00541 float toMs (float index);
00542 float toKmh (float index);
00543
00544 void setNumTrains (int numTrains, NlTrack *Track);
00545 int getNumTrains (NlTrack *Track);
00546 void setNumCars (int numCars, NlTrack *Track);
00547 int getNumCars (NlTrack *Track);
00548 int setTrainProperty (int trainindex, char *textureFilename, int useIndividualColor, Color seatColor, Color restraintColor, Color trainColor, Color gearColor, NlTrack *Track);
00549 Train getTrainProperty (int trainindex, NlTrack *Track);
00550 Color getTrackSpineColor (NlTrack *Track);
00551 Color getTrackRailColor (NlTrack *Track);
00552 Color getTrackCrosstieColor (NlTrack *Track);
00553 Color getTrackSupportsColor (NlTrack *Track);
00554 Color getTrackTrainSeatColor (NlTrack *Track);
00555 Color getTrackTrainRestraintColor (NlTrack *Track);
00556 Color getTrackTrainColor (NlTrack *Track);
00557 Color getTrackTrainGearColor (NlTrack *Track);
00558 Color getTrackTunnelColor (NlTrack *Track);
00559 int getTrackUseTunnelColor (NlTrack *Track);
00560 void setTrackSpineColor (NlTrack *Track, Color trackSpineColor);
00561 void setTrackRailColor (NlTrack *Track, Color trackRailColor);
00562 void setTrackCrosstieColor (NlTrack *Track, Color trackCrosstieColor);
00563 void setTrackSupportsColor (NlTrack *Track, Color supportsColor);
00564 void setTrackTrainSeatColor (NlTrack *Track, Color trainSeatColor);
00565 void setTrackTrainRestraintColor (NlTrack *Track, Color trainRestraintColor);
00566 void setTrackTrainColor (NlTrack *Track, Color trainColor);
00567 void setTrackTrainGearColor (NlTrack *Track, Color trainGearColor);
00568 void setTrackTunnelColor (NlTrack *Track, Color tunnelColor);
00569 void setTrackUseTunnelColor (NlTrack *Track, int useTunnelColor);
00570
00571 int addSupport (int n1type, int n1index, int n1segIndex, int n2type, int n2index, int n2segIndex, int tubeType, int flags, int rotation, NlTrack *Track);
00572 void modifySupport (int suppindex, int tubeType, int flags, int rotation, NlTrack *Track);
00573 void deleteSupport (int suppindex, NlTrack *Track);
00574 Tube getSupport (int suppindex, NlTrack *Track);
00575 int getTotalSupport (NlTrack *Track);
00576
00577 int addTrackNode(int segindex, int type, float pos, NlTrack *Track);
00578 void modifyTrackNode(int segindex, int rascindex, int type, float pos, NlTrack *Track);
00579 void deleteTrackNode(int segindex, int rascindex, NlTrack *Track);
00580 SegmentNode getTrackNode(int segindex, int rascindex, NlTrack *Track);
00581 int getTotalTrackNodes(int segindex, NlTrack *Track);
00582
00583 #endif