Seite 1 von 1

JA2 Source Code Project

Verfasst: 15 Mär 2004, 16:41
von Gunny
ihr Modder und Progger dieser Welt!

wenn ihr Interesse habt am JA2 Source Code herumzuspielen und der Community eure Entdeckungen / Programmierkünste vorzuführen, dann habt ihr auf dem BearsPit alle Möglichkeiten dazu

auf dem BearsPit wurde das Whitehat Project aufgestellt, das es sich zum Ziel hat, alles Mögliche und auch das Unmögliche aus dem Code herauszuholen

ich sage VIEL SPAß!

Gunny

P.S.
das heißt natürlich nicht, das ihr mit euren Entdeckungen dem Basis-Forum gleich den Rücken kehren sollt ;)

Verfasst: 15 Mär 2004, 17:00
von Gunny
This is the third in a series of posts that I'm planning to help people understand the source.

The following describes step by step what to do to fix a "feature" that some evil person introduced when makng version 1.12. For whatever reason, someone decided to remove the distinction between small grenades and large grenades. Outwardly, this looks like there is no difference in the weight of the grenade. We're going to make mini-grenades useful again. If you hunt around, you'll see the function responsible in "Tactical\Weapons.c":

[Übersetzung]
Hier wird Schritt für Schritt beschrieben wie man das Problem mit dem Gewicht der Handgranaten in JA2 1.12 beseitigen kann, das aus Versehen (?) auftauchte. Genauer gesagt war das Gewicht der Granaten egal, also ob Mini- oder normale Granate, die Wurfweite war immer gleich.
Die Lösung des Problems findet sich in "Tactical\Weapons.c":

code:
--------------------------------------------------------------------------------

INT32 CalcMaxTossRange( SOLDIERTYPE * pSoldier, UINT16 usItem, BOOLEAN fArmed )
{
INT32 iRange; UINT16 usSubItem;
if ( EXPLOSIVE_GUN( usItem ) )
{
// oops! return value in weapons table
return( Weapon[ usItem ].usRange / CELL_X_SIZE );
}
// if item's fired mechanically
// ATE: If we are sent in a LAUNCHABLE, get the LAUCNHER, and sub ONLY if we are armed...
usSubItem = GetLauncherFromLaunchable( usItem );
if ( fArmed && usSubItem != NOTHING )
{
usItem = usSubItem;
}
if ( Item[ usItem ].usItemClass == IC_LAUNCHER && fArmed ) {
// this function returns range in tiles so, stupidly, we have to divide by 10 here
iRange = Weapon[usItem].usRange / CELL_X_SIZE;
}
else
{
if ( Item[ usItem ].fFlags & ITEM_UNAERODYNAMIC )
{
iRange = 1;
}
else if ( Item[ usItem ].usItemClass == IC_GRENADE )
{
// start with the range based on the soldier's strength and the item's weight
INT32 iThrowingStrength = ( EffectiveStrength( pSoldier ) * 2 + 100 ) / 3;
iRange = 2 + ( iThrowingStrength / __min( ( 3 + (Item[usItem].ubWeight) / 3 ), 4 ) );
}
else
{
// not as aerodynamic!
// start with the range based on the soldier's strength and the item's weight
iRange = 2 + ( ( EffectiveStrength( pSoldier ) / ( 5 + Item[usItem].ubWeight) ) );
}
// adjust for thrower's remaining breath (lose up to 1/2 of range)
iRange -= (iRange * (100 - pSoldier->bBreath)) / 200;
if ( HAS_SKILL_TRAIT( pSoldier, THROWING ) )
{
// better max range due to expertise
iRange = iRange * (100 + gbSkillTraitBonus[THROWING] * NUM_SKILL_TRAITS( pSoldier, THROWING ) ) / 100;
}
}
if (iRange < 1)
{
iRange = 1;
}
return( iRange );}

--------------------------------------------------------------------------------

look closely, soemone has put a maximum cap on grenade weight.


code:
--------------------------------------------------------------------------------


iRange = 2 + ( iThrowingStrength / __min( ( 3 + (Item[usItem].ubWeight) / 3 ), 4 ) );

--------------------------------------------------------------------------------

If only in the real world heavy objects magically became the same weight if they were too heavy. Or, maybe that'd be bad (/me pictures himself floating away from Earth because the gravity is too low). Anyway, we're going to change it:

Übersetzung
Wenn es nur in der Realität auch so einfach wäre, ein zu schweres Objekt auf magische Weise leichter zu machen. ;) Na gut, vielleicht ist es nicht ganz so gut, wenn ich daran denke wie ich mich von der Erde entferne weil die Gravitation zu klein ist. Aber egal, machen wir uns daran das zu ändern:


code:
--------------------------------------------------------------------------------


iRange = 2 + ( iThrowingStrength / ( 3 + (Item[usItem].ubWeight) / 3 ));

--------------------------------------------------------------------------------

There, now you can build ja2.exe and throw physically accurate grenades to your content.

NOTE: Please tell me if you've done all of the above steps and stuff still doesn't work. It's possible that I missed a step that I've done in my code or *gasp* missed some neccesary modification that has to be coded.

If you need clarification on certain points, please post and I'll do my best.

Übersetzung
Nun kannst du die Exe kompilieren und Granaten physikalisch korrekt nach Lust und Laune werfen.
ANMERKUNG: Bitte informiert mich, wenn ihr all die Schritte unternommen haben solltet und es trotzdem nicht funktioniert. Vielleicht habe ich ja eine Änderung im Code aus Versehen nicht gepostet, oder *Seufz* irgend etwas falsch gemacht / nicht gecodet.

THX to Digicrab

Verfasst: 15 Mär 2004, 18:21
von shadow the deat
schon drinne :P


aber zu den Tuts etc... die Packt Tox alle auf eine Seite
wer Lust hat kann die ja in De übersetzen

und noch was Außerdeutsche Mirror wären noch gut


hier der link

[EDIT by Gunny]
- du bist drin? --> na dann zeig mal was du drauf hast :)
- genau dafür ist dieser Thread... um die übersetzen Tuts zu posten
- Mirror wofür?
- und in Zukunft hier solche nichtssagenden Posts bitte unterlassen
- welcher Link ;)
[/EDIT]

Verfasst: 15 Mär 2004, 19:28
von shadow the deat
SMKINTRO_REBEL_CRDT,
SMKINTRO_OMERTA,
SMKINTRO_PRAGUE_CRDT,
SMKINTRO_PRAGUE,

//there are no more videos shown for the begining


SMKINTRO_END_END_SPEECH_MIGUEL,
SMKINTRO_END_END_SPEECH_NO_MIGUEL,
SMKINTRO_END_HELI_FLYBY,
SMKINTRO_END_SKYRIDER_HELICOPTER,
SMKINTRO_END_NOSKYRIDER_HELICOPTER,

SMKINTRO_SPLASH_SCREEN,
SMKINTRO_SPLASH_TALONSOFT,

//there are no more videos shown for the endgame
SMKINTRO_LAST_END_GAME,
}; hier sind alle aufgelistet und wann sie Spielen


CHAR *gpzSmackerFileNames[] =
{
//begining of the game
"INTRO\\Rebel_cr.smk",
"INTRO\\Omerta.smk",
"INTRO\\Prague_cr.smk",
"INTRO\\Prague.smk",


//endgame
"INTRO\\Throne_Mig.smk",
"INTRO\\Throne_NoMig.smk",
"INTRO\\Heli_FlyBy.smk",
"INTRO\\Heli_Sky.smk",
"INTRO\\Heli_NoSky.smk",

"INTRO\\SplashScreen.smk",
"INTRO\\TalonSoftid_endhold.smk",
};

Wann sie Anfangen

INT32 GetNextIntroVideo( UINT32 uiCurrentVideo )
{
INT32 iStringToUse = -1;

//switch on whether it is the beginging or the end game video
switch( gbIntroScreenMode )
{
//the video at the begining of the game
case INTRO_BEGINING:
{
switch( uiCurrentVideo )
{
case SMKINTRO_FIRST_VIDEO:
iStringToUse = SMKINTRO_REBEL_CRDT;
break;
case SMKINTRO_REBEL_CRDT:
iStringToUse = SMKINTRO_OMERTA;
break;
case SMKINTRO_OMERTA:
iStringToUse = SMKINTRO_PRAGUE_CRDT;
break;
case SMKINTRO_PRAGUE_CRDT:
iStringToUse = SMKINTRO_PRAGUE;
break;
case SMKINTRO_PRAGUE:
iStringToUse = -1;
break;
// case SMKINTRO_LAST_INTRO:
// iStringToUse = -1;
// break;
}
}
break;

//end game
case INTRO_ENDING:
{
switch( uiCurrentVideo )
{
case SMKINTRO_FIRST_VIDEO:
//if Miguel is dead, play the flic with out him in it
if( gMercProfiles[ MIGUEL ].bMercStatus == MERC_IS_DEAD )
iStringToUse = SMKINTRO_END_END_SPEECH_NO_MIGUEL;
else
iStringToUse = SMKINTRO_END_END_SPEECH_MIGUEL;
break;

case SMKINTRO_END_END_SPEECH_MIGUEL:
case SMKINTRO_END_END_SPEECH_NO_MIGUEL:
iStringToUse = SMKINTRO_END_HELI_FLYBY;
break;

//if SkyRider is dead, play the flic without him
case SMKINTRO_END_HELI_FLYBY:
if( gMercProfiles[ SKYRIDER ].bMercStatus == MERC_IS_DEAD )
iStringToUse = SMKINTRO_END_NOSKYRIDER_HELICOPTER;
else
iStringToUse = SMKINTRO_END_SKYRIDER_HELICOPTER;
break;
}
}
break;

case INTRO_SPLASH:
switch( uiCurrentVideo )
{
case SMKINTRO_FIRST_VIDEO:
iStringToUse = SMKINTRO_SPLASH_SCREEN;
break;
case SMKINTRO_SPLASH_SCREEN:
//iStringToUse = SMKINTRO_SPLASH_TALONSOFT;
break;
}
break;
}

return( iStringToUse );
}
this to but with if terms

gMercProfiles[ SKYRIDER ].bMercStatus == MERC_IS_DEAD )

wenn man es in gMercProfiles[ Shadow ].bMercStatus == MERC_IS_DEAD )
dann wird es gespielt wenn Shadow stirbt

but i Thing we can change
gMercProfiles[ SKYRIDER ].bMercStatus == MERC_IS_PRISON )
hier startet es wenn er Gefangen ist es sind noch andere Stadien Möglich wie Verletzt oder so aber ich weiß noch nicht den Absatz

memset( &VObjectDesc, 0, sizeof( VOBJECT_DESC ) );
VObjectDesc.fCreateFlags=VOBJECT_CREATE_FROMFILE;
FilenameForBPP("INTERFACE\\SirtechSplash.sti", VObjectDesc.ImageFile);

// FilenameForBPP("INTERFACE\\TShold.sti", VObjectDesc.ImageFile);
if( !AddVideoObject(&VObjectDesc, &uiLogoID) )
{
AssertMsg( 0, String( "Failed to load %s", VObjectDesc.ImageFile ) );
return;
}

Verfasst: 15 Mär 2004, 22:37
von Lokadamus
mmm...

Wäre es möglich, entweder den veränderten Source als Datei dranzuhängen oder das wir ein

Code: Alles auswählen

 - Tag bekommen (gibt es in einigen Foren), wodurch es möglich ist, dass der Sourcecode gleich richtig dargestellt wird ? Nebenbei wäre es nett, auch zu wissen, welche Datei bearbeitet wird und wo sie zu finden ist, oder shadow of Rechtschreibung ? ...

Verfasst: 15 Mär 2004, 23:02
von Nitrat
oder das wir ein

Code: Alles auswählen

 - Tag bekommen [/quote] 

du wirst es wohl vergessen haben, aber das gibts tatsächlich ;)

[*PHP]SMKINTRO_REBEL_CRDT,
SMKINTRO_OMERTA,
SMKINTRO_PRAGUE_CRDT,
SMKINTRO_PRAGUE,
[*/PHP]
*wegnehmen und dann erscheint
[PHP]SMKINTRO_REBEL_CRDT,
SMKINTRO_OMERTA,
SMKINTRO_PRAGUE_CRDT,
SMKINTRO_PRAGUE,
[/PHP]
ist zwar kein richtige code den du meinst einzufügen, 
aber immerhin etwas was man machen könnte um es 
übersichtlicher zu gestalten. wo ich auch schon beim 
thema überischt bin, bitte kommentare und disskussionen [url=http://ja-forum.gamigo.de/showthread.php?threadid=14421]hier[/url] fortführen.

im übrigen ist es in meinen augen etwas unsinnig hier 
etwas aufzubauen, was allgemein im US board besser klappt.

MFG......

Verfasst: 15 Mär 2004, 23:20
von Gunny
Original geschrieben von Nitrat
... im übrigen ist es in meinen augen etwas unsinnig hier
etwas aufzubauen, was allgemein im US board besser klappt.

MFG......
dieser Thread hier ist auch net als Konkurrenz zum Whitehat Project zu verstehen, vielmehr wollte ich damit hier auf dem Basis-Forum darauf aufmerksam machen,
als zweiter Zweck hatte ich mir vorgestellt, einfach ein loses Posting von Ergebnissen des Projects,
weil viele ja nicht im BearsPit vorbeischauen

außerdem gibt das mehr Besucher für das Forum ;)

Verfasst: 01 Apr 2004, 18:46
von shadow the deat
ok ich lass auch mal wieder was von mich hören
das Thema hier kann geschlossen werden da ein Teil der Write Hats ja2 moddable mach - da her fangen wir an das wichtigste in xml zu bringen die Waffenwerte sind schon drinne , die Städtegröße folg und so aber ka wie lange das dauert
die Samsstellungen sind auch in mache blos das dauert noch
aber egal

deswegen würde ich sagen das das hier geschlossen werden kann

Verfasst: 01 Apr 2004, 20:23
von Nitrat
yo schliesst am besten das gesamte Map Forum
....hier ist ja sowieso nichts los und es lohnt sich ja auch
garnicht mal etwas für das fortbestehen eines Forums zu tun...

es ist zwar schön das du im White Hat Projekt drin
bist Shadow, aber hier muss auch dringend was
getan werden, deshalb lass ich diesen Thread offen !


MFG......

Verfasst: 01 Apr 2004, 21:17
von Tingeroo
Ich halte diesen thread fürne gute Möglichkeit zwischen Proggern und Nasen wie mich in Kontakt zu bleiben, denn ich kann nur schreiben, was ich gerne geändert sähe ,es aber net umsetzen!
Gut finde ich, dass etwas getan wird, egal wo...

Gruß

:bandit:

Verfasst: 02 Apr 2004, 14:02
von shadow the deat
ok dann hier wieder was zum Thema nicht vollständig aber nen Teil ist da bestimmt hier nen Auszug aus strategicmap.c

[PHP]};

INT16 pSamList[ NUMBER_OF_SAMS ]={
SECTOR( SAM_1_X, SAM_1_Y ),
SECTOR( SAM_2_X, SAM_2_Y ),
SECTOR( SAM_3_X, SAM_3_Y ),
SECTOR( SAM_4_X, SAM_4_Y ),
};
[/PHP] hier muss man einfach SECTOR( SAM_5_X, SAM_5_Y)
[PHP]
};[/PHP] // have any of the sam sites been found
BOOLEAN fSamSiteFound[ NUMBER_OF_SAMS ]={
FALSE,
FALSE,
FALSE,
FALSE,
}; hier welche gefunden wurden nehmen wir zum Test die 5. Zeile mit TRUE

[PHP]
INT16 pSamGridNoAList[ NUMBER_OF_SAMS ]={
10196,
11295,
16080,
11913,

INT16 pSamGridNoBList[ NUMBER_OF_SAMS ]={
10195,
11135,
15920,
11912,
};
[/PHP] [PHP] bei den beiden bin ich noch Planlos deswegen lassen wir das aus

// ATE: Update this w/ graphic used
// Use 3 if / orientation, 4 if \ orientation
INT8 gbSAMGraphicList[ NUMBER_OF_SAMS ]={
4,
3,
3,
3,
};
[/PHP] einfach ne 3 Hinzufügen


[PHP]UINT8 ubSAMControlledSectors[ MAP_WORLD_Y ][ MAP_WORLD_X ] = {
// 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 2, 2, 2, 2, 2, 2, 0, // A
0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 0, // B
0, 1, 1, 1, 1, 1, 1, 1, 3, 2, 2, 2, 2, 2, 2, 2, 2, 0, // C
0, 1,01, 1, 1, 1, 1, 1, 3, 3, 2, 2, 2, 2, 2,02, 2, 0, // D
0, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 0, // E
0, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 0, // F
0, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 0, // G
0, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 0, // H
0, 1, 1, 3, 3, 3, 3, 3,03, 3, 3, 3, 3, 3, 2, 2, 2, 0, // I
0, 1, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 0, // J
0, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 0, // K
0, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 0, // L
0, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 2, 2, 2, 0, // M
0, 4, 4, 4,04, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 0, // N
0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 0, // O
0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 0, // P

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};[/PHP]

hier die ist am Wichtigsten bei Zahlen wie 01,02,03,04 sind jeweils der Standort der Rest ist die Jeweilige Reichweite
wenn man eins Hinzufügen will muss man dann 05 nehm und dann halt dann 5 wen verteilen


[PHP]{
case SEC_D2: //Chitzena SAM
if( !fSamSiteFound[ SAM_SITE_ONE ] )
wcscat( zString, pLandTypeStrings[ TROPICS ] );
else if( fDetailed )
wcscat( zString, pLandTypeStrings[ TROPICS_SAM_SITE ] );
else
wcscat( zString, pLandTypeStrings[ SAM_SITE ] );
break;
case SEC_D15: //Drassen SAM
if( !fSamSiteFound[ SAM_SITE_TWO ] )
wcscat( zString, pLandTypeStrings[ SPARSE ] );
else if( fDetailed )
wcscat( zString, pLandTypeStrings[ SPARSE_SAM_SITE ] );
else
wcscat( zString, pLandTypeStrings[ SAM_SITE ] );
break;
case SEC_I8: //Cambria SAM
if( !fSamSiteFound[ SAM_SITE_THREE ] )
wcscat( zString, pLandTypeStrings[ SAND ] );
else if( fDetailed )
wcscat( zString, pLandTypeStrings[ SAND_SAM_SITE ] );
else
wcscat( zString, pLandTypeStrings[ SAM_SITE ] );
break;
default:
wcscat( zString, pLandTypeStrings[ ubLandType ] );
break;
}
}
[/PHP] so der Setze Abschnitt Zeigt wie alle Heißen

bei mir ging es :azzangel:
wenn ich Irgendwas vergessen hab bitte sagt es

Verfasst: 02 Apr 2004, 14:44
von Gunny
hehe, da hast du mich überrumpelt, da bin ich auch grad dran

Verfasst: 02 Apr 2004, 15:41
von shadow the deat
wie gesagt um ändern gehts ja bei mir hauptsächlich nicht
ich bin dabei das in ner xml zu vereinfachen

also kannste ja lieber versuchen nen Fahrbaren Panzer zu machen *lol*

€edit mist jetzt weiß ich was ich vergessen hab ich weiß blos nicht mehr in welcher .c das war muss ich suchen
da war drinne wo bei welchen Schwierigkeitsgrad wieviele Soldaten sind :confused:

Verfasst: 03 Apr 2004, 09:49
von shadow the deat
ich habs gefunden in der strategicmap.h

[PHP]#define NUMBER_OF_SAMS 4[/PHP]
wenn das jetzt nicht logisch ist dann weiß ich auch nicht :crazy:
[PHP]// SAM sites
#define SAM_1_X 2
#define SAM_2_X 15
#define SAM_3_X 8
#define SAM_4_X 4

#define SAM_1_Y 4
#define SAM_2_Y 4
#define SAM_3_Y 9
#define SAM_4_Y 14[/PHP]

hier jetzt die genauen Koordinaten von den Sams

[PHP]// min condition for sam site to be functional
#define MIN_CONDITION_FOR_SAM_SITE_TO_WORK 80[/PHP]

nur ne Spielerrei hier steht wieviel 80% das Sam heile sein muss damit es geht


jetzt wiederwas in der strategicmap.c

[PHP]// all SAM sites start game in perfect working condition
StrategicMap[(SAM_1_X)+(MAP_WORLD_X*(SAM_1_Y))].bSAMCondition = 100;
StrategicMap[(SAM_2_X)+(MAP_WORLD_X*(SAM_2_Y))].bSAMCondition = 100;
StrategicMap[(SAM_3_X)+(MAP_WORLD_X*(SAM_3_Y))].bSAMCondition = 100;
StrategicMap[(SAM_4_X)+(MAP_WORLD_X*(SAM_4_Y))].bSAMCondition = 100;
[/PHP]

hier muss man mal weider StrategicMap[(SAM_5_X)+(MAP_WORLD_X*(SAM_5_Y))].bSAMCondition = 100;

die zahl dahinter steht für den Zustand also wenn wir 50 Einstellen müssen sie die erst Reparieren ( zumindest sollten die es laut source machen) so ist es Möglich zb dne Bau von einer Sam zu Realisieren


es feht immernoch die string wo die sams to Samsone oder so definiert sind , bis jetzt ist es dann möglich Sam hinzuzufügen aber nur wenn sie sichtbar sind nicht das man sie Finden muss
und es ist nicht möglich die Sequenz mit Diedranner zu ändern
es ist schon möglich blos gehe ich nicht auf die Meanwhile.c bzw Meanwhile.h ein

Verfasst: 23 Apr 2004, 06:01
von shadow the deat
ok hier ist jetzt die vollständige Version
Nachteil ist das keine Gegener in den Sector sind da das anderes definiert ist bzw ich da auch ein String noch nicht gefunden hab.
zum Test einfach mal ne Patrolie auf A8 Setzen
in strategic/strategic.c
line 250

PATROL_GROUP gOrigPatrolGroup[] =
{ //SIZE PRIORITY POINT1 POINT2 POINT3 POINT4 MOD GROUPID WEIGHT PENDING
// DAY100
8 40 SEC_B1, SEC_C1, SEC_C3, SEC_A3, -1 0 0 0 {0,0,0,0,0,0,0,0,0,0},
6 35 SEC_B4, SEC_B7, SEC_C7, 0 -1 0 0 0 {0,0,0,0,0,0,0,0,0,0},
6 25 SEC_A8, SEC_B8, SEC_B9, 0 -1 0 0 0 {0,0,0,0,0,0,0,0,0,0},
6 30 SEC_B10, SEC_B12, 0 0 -1 0 0 0 {0,0,0,0,0,0,0,0,0,0},
7 45 SEC_A11, SEC_A14, SEC_D14, 0 -1 0 0 0 {0,0,0,0,0,0,0,0,0,0},
//5
6 50 SEC_C8, SEC_C9, SEC_D9, 0 -1 0 0 0 {0,0,0,0,0,0,0,0,0,0},
12 55 SEC_D3, SEC_G3, 0 0 -1 0 0 0 {0,0,0,0,0,0,0,0,0,0},
10 50 SEC_D6, SEC_D7, SEC_F7, 0 -1 0 0 0 {0,0,0,0,0,0,0,0,0,0},
10 55 SEC_E8, SEC_E11, SEC_F11, 0 -1 0 0 0 {0,0,0,0,0,0,0,0,0,0},
10 60 SEC_E12, SEC_E15, 0 0 -1 0 0 0 {0,0,0,0,0,0,0,0,0,0},
//10
12 60 SEC_G4, SEC_G7, 0 0 -1 0 0 0 {0,0,0,0,0,0,0,0,0,0},
12 65 SEC_G10, SEC_G12, SEC_F12, 0 -1 0 0 0 {0,0,0,0,0,0,0,0,0,0},
12 65 SEC_G13, SEC_G15, 0 0 -1 0 0 0 {0,0,0,0,0,0,0,0,0,0},
10 65 SEC_H15, SEC_J15, 0 0 -1 0 0 0 {0,0,0,0,0,0,0,0,0,0},
14 65 SEC_H12, SEC_J12, SEC_J13, 0 -1 0 0 0 {0,0,0,0,0,0,0,0,0,0},
//15
13 70 SEC_H9, SEC_I9, SEC_I10, SEC_J10, -1 0 0 0 {0,0,0,0,0,0,0,0,0,0},
11 70 SEC_K11, SEC_K14, SEC_J14, 0 -1 0 0 0 {0,0,0,0,0,0,0,0,0,0},
12 75 SEC_J2, SEC_K2, 0 0 -1 0 0 0 {0,0,0,0,0,0,0,0,0,0},
12 80 SEC_I3, SEC_J3, 0 0 -1 0 0 0 {0,0,0,0,0,0,0,0,0,0},
12 80 SEC_J6, SEC_K6, 0 0 -1 0 0 0 {0,0,0,0,0,0,0,0,0,0},
//20
13 85 SEC_K7, SEC_K10, 0 0 -1 0 0 0 {0,0,0,0,0,0,0,0,0,0},
12 90 SEC_L10, SEC_M10, 0 0 -1 0 0 0 {0,0,0,0,0,0,0,0,0,0},
12 90 SEC_N9, SEC_N10, 0 0 -1 0 0 0 {0,0,0,0,0,0,0,0,0,0},
12 80 SEC_L7, SEC_L8, SEC_M8, SEC_M9, -1 0 0 0 {0,0,0,0,0,0,0,0,0,0},
14 80 SEC_H4, SEC_H5, SEC_I5, 0 -1 0 0 0 {0,0,0,0,0,0,0,0,0,0},
//25
7 40 SEC_D4, SEC_E4, SEC_E5, 0 -1 0 0 0 {0,0,0,0,0,0,0,0,0,0},
7 50 SEC_C10, SEC_C11, SEC_D11, SEC_D12, -1 0 0 0 {0,0,0,0,0,0,0,0,0,0},
8 40 SEC_A15, SEC_C15, SEC_C16, 0 -1 0 0 0 {0,0,0,0,0,0,0,0,0,0},
12 30 SEC_L13, SEC_M13, SEC_M14, SEC_L14, -1 0 0 0 {0,0,0,0,0,0,0,0,0,0},
//29
};
#define PATROL_GROUPS 29
da einfach ne Zeile hinzufügen mit allen Punkten A8 und unten halt ne 30
*lol*

so jetzt zum Tut das findet ihr unter

http://mitglied.lycos.de/fallendeath/

Verfasst: 23 Apr 2004, 20:42
von shadow the deat
WIE FÜGE ICH NEUE WAFFEN HINZU

@ tactical/Item Types.h
@ line 275

[PHP]#define FIRST_WEAPON 1
#define FIRST_AMMO 71
#define FIRST_EXPLOSIVE 131
#define FIRST_ARMOUR 161
#define FIRST_MISC 201
#define FIRST_KEY 271
[/PHP]

das stellt die Anfangsdaten dar am besten kann man das sich hier wie die Liste bei Weedit vorstellen

@ line 284

[PHP]#define NOTHING NONE
typedef enum
{
NONE

// weapons
GLOCK_17
GLOCK_18,
BERETTA_92F,
BERETTA_93R,
SW38,
BARRACUDA,
DESERTEAGLE,
M1911,
MP5K,
MAC10,

THOMPSON,
COMMANDO,
MP53,
AKSU74,
P90,
TYPE85,
SKS,
DRAGUNOV,
M24,
AUG,

G41,
MINI14,
C7,
FAMAS,
AK74,
AKM,
M14,
FNFAL,
G3A3,
G11,

M870,
SPAS15,
CAWS,
MINIMI,
RPK74,
HK21E,
COMBAT_KNIFE,
THROWING_KNIFE,
ROCK,
GLAUNCHER,

MORTAR,
ROCK2,
CREATURE_YOUNG_MALE_CLAWS,
CREATURE_OLD_MALE_CLAWS,
CREATURE_YOUNG_FEMALE_CLAWS,
CREATURE_OLD_FEMALE_CLAWS,
CREATURE_QUEEN_TENTACLES,
CREATURE_QUEEN_SPIT,
BRASS_KNUCKLES,
UNDER_GLAUNCHER,

ROCKET_LAUNCHER,
BLOODCAT_CLAW_ATTACK,
BLOODCAT_BITE,
MACHETE,
ROCKET_RIFLE,
AUTOMAG_III,
CREATURE_INFANT_SPIT,
CREATURE_YOUNG_MALE_SPIT,
CREATURE_OLD_MALE_SPIT,
TANK_CANNON,

DART_GUN,
BLOODY_THROWING_KNIFE,
FLAMETHROWER,
CROWBAR,
AUTO_ROCKET_RIFLE,

MAX_WEAPONS

CLIP9_15
CLIP9_30,
CLIP9_15_AP,
CLIP9_30_AP,
CLIP9_15_HP,
CLIP9_30_HP,
CLIP38_6,
CLIP38_6_AP,
CLIP38_6_HP,
CLIP45_7,

CLIP45_30,
CLIP45_7_AP,
CLIP45_30_AP,
CLIP45_7_HP,
CLIP45_30_HP,
CLIP357_6,
CLIP357_9,
CLIP357_6_AP,
CLIP357_9_AP,
CLIP357_6_HP,

CLIP357_9_HP,
CLIP545_30_AP,
CLIP545_30_HP,
CLIP556_30_AP,
CLIP556_30_HP,
CLIP762W_10_AP,
CLIP762W_30_AP,
CLIP762W_10_HP,
CLIP762W_30_HP,
CLIP762N_5_AP,

CLIP762N_20_AP,
CLIP762N_5_HP,
CLIP762N_20_HP,
CLIP47_50_SAP,
CLIP57_50_AP,
CLIP57_50_HP,
CLIP12G_7,
CLIP12G_7_BUCKSHOT,
CLIPCAWS_10_SAP,
CLIPCAWS_10_FLECH,

CLIPROCKET_AP,
CLIPROCKET_HE,
CLIPROCKET_HEAT,
CLIPDART_SLEEP,

CLIPFLAME,

// explosives
STUN_GRENADE
TEARGAS_GRENADE,
MUSTARD_GRENADE,
MINI_GRENADE,
HAND_GRENADE,
RDX,
TNT,
HMX,
C1,
MORTAR_SHELL,

MINE,
C4,
TRIP_FLARE,
TRIP_KLAXON,
SHAPED_CHARGE,
BREAK_LIGHT,
GL_HE_GRENADE,
GL_TEARGAS_GRENADE,
GL_STUN_GRENADE,
GL_SMOKE_GRENADE,

SMOKE_GRENADE,
TANK_SHELL,
STRUCTURE_IGNITE,
CREATURE_COCKTAIL,
STRUCTURE_EXPLOSION,
GREAT_BIG_EXPLOSION,
BIG_TEAR_GAS,
SMALL_CREATURE_GAS,
LARGE_CREATURE_GAS,
VERY_SMALL_CREATURE_GAS,

// armor
FLAK_JACKET,
FLAK_JACKET_18,
FLAK_JACKET_Y,
KEVLAR_VEST,
KEVLAR_VEST_18,
KEVLAR_VEST_Y,
SPECTRA_VEST,
SPECTRA_VEST_18,
SPECTRA_VEST_Y,
KEVLAR_LEGGINGS,

KEVLAR_LEGGINGS_18,
KEVLAR_LEGGINGS_Y,
SPECTRA_LEGGINGS,
SPECTRA_LEGGINGS_18,
SPECTRA_LEGGINGS_Y,
STEEL_HELMET,
KEVLAR_HELMET,
KEVLAR_HELMET_18,
KEVLAR_HELMET_Y,
SPECTRA_HELMET,

SPECTRA_HELMET_18,
SPECTRA_HELMET_Y,
CERAMIC_PLATES,
CREATURE_INFANT_HIDE,
CREATURE_YOUNG_MALE_HIDE,
CREATURE_OLD_MALE_HIDE,
CREATURE_QUEEN_HIDE,
LEATHER_JACKET,
LEATHER_JACKET_W_KEVLAR,
LEATHER_JACKET_W_KEVLAR_18,

LEATHER_JACKET_W_KEVLAR_Y,
CREATURE_YOUNG_FEMALE_HIDE,
CREATURE_OLD_FEMALE_HIDE,
TSHIRT,
TSHIRT_DEIDRANNA,
KEVLAR2_VEST,
KEVLAR2_VEST_18,
KEVLAR2_VEST_Y,

// kits
FIRSTAIDKIT
MEDICKIT,
TOOLKIT,
LOCKSMITHKIT,
CAMOUFLAGEKIT,
BOOBYTRAPKIT,
// miscellaneous
SILENCER,
SNIPERSCOPE,
BIPOD,
EXTENDEDEAR,

NIGHTGOGGLES,
SUNGOGGLES,
GASMASK,
CANTEEN,
METALDETECTOR,
COMPOUND18,
JAR_QUEEN_CREATURE_BLOOD,
JAR_ELIXIR,
MONEY,
JAR,

JAR_CREATURE_BLOOD,
ADRENALINE_BOOSTER,
DETONATOR,
REMDETONATOR,
VIDEOTAPE,
DEED,
LETTER,
TERRORIST_INFO,
CHALICE,
BLOODCAT_CLAWS,

BLOODCAT_TEETH,
BLOODCAT_PELT,
SWITCH,
// fake items
ACTION_ITEM,
REGEN_BOOSTER,
SYRINGE_3,
SYRINGE_4,
SYRINGE_5,
JAR_HUMAN_BLOOD,
OWNERSHIP,

// additional items
LASERSCOPE,
REMOTEBOMBTRIGGER,
WIRECUTTERS,
DUCKBILL,
ALCOHOL,
UVGOGGLES,
DISCARDED_LAW,
HEAD_1,
HEAD_2,
HEAD_3,
HEAD_4,
HEAD_5,
HEAD_6,
HEAD_7,
WINE,
BEER,
PORNOS,
VIDEO_CAMERA,
ROBOT_REMOTE_CONTROL,
CREATURE_PART_CLAWS,
CREATURE_PART_FLESH,
CREATURE_PART_ORGAN,
REMOTETRIGGER,
GOLDWATCH,
GOLFCLUBS,
WALKMAN,
PORTABLETV,
MONEY_FOR_PLAYERS_ACCOUNT,
CIGARS,

KEY_1 = FIRST_KEY,
KEY_2,
KEY_3,
KEY_4,
KEY_5,
KEY_6,
KEY_7,
KEY_8,
KEY_9,
KEY_10,

KEY_11,
KEY_12,
KEY_13,
KEY_14,
KEY_15,
KEY_16,
KEY_17,
KEY_18,
KEY_19,
KEY_20,

KEY_21,
KEY_22,
KEY_23,
KEY_24,
KEY_25,
KEY_26,
KEY_27,
KEY_28,
KEY_29,
KEY_30,

KEY_31,
KEY_32,
SILVER_PLATTER,
DUCT_TAPE,
ALUMINUM_ROD,
SPRING,
SPRING_AND_BOLT_UPGRADE,
STEEL_ROD,
QUICK_GLUE,
GUN_BARREL_EXTENDER,

STRING,
TIN_CAN,
STRING_TIED_TO_TIN_CAN,
MARBLES,
LAME_BOY,
COPPER_WIRE,
DISPLAY_UNIT,
FUMBLE_PAK,
XRAY_BULB,
CHEWING_GUM, // 320

FLASH_DEVICE,
BATTERIES,
ELASTIC,
XRAY_DEVICE,
SILVER,
GOLD,
GAS_CAN,
UNUSED_26,
UNUSED_27,
UNUSED_28,

UNUSED_29,
UNUSED_30,
UNUSED_31,
UNUSED_32,
UNUSED_33,
UNUSED_34,
UNUSED_35,
UNUSED_36,
UNUSED_37,
UNUSED_38, // 340

UNUSED_39,
UNUSED_40,
UNUSED_41,
UNUSED_42,
UNUSED_43,
UNUSED_44,
UNUSED_45,
UNUSED_46,
UNUSED_47,
UNUSED_48, // 350

MAXITEMS
} ITEMDEFINE;
[/PHP] Weedit lässt wieder grüßen

@ Items.c
@ line 54 eine wichtige Tabelle die man nach belieben änder kann


@ line 487 sind die Kombinationen

@ Weapon.h stehen blos dinge wie ab 50 Schaden Platz der Kopf oder so

@ weapon.c
@line 120 da ist wieder ne Liste :razz:


ok überall einfach die Zeilen so anpassen wie es sein muss oder eine Hinzufügen *lol*

Eigene maps

Verfasst: 29 Apr 2004, 14:55
von Ace24
Kann mir jemand genau erklären wie man wenn man einen oder mehrere sektoren fertig hat die kampagne ans laufen kriegt.:confused:

Verfasst: 29 Apr 2004, 19:22
von smilingassassin
man könnte also die wedit tabellen verlängern, indem man diese line 275 ändert und dann die jeweiligen items verschiebt? so define first ammo 100 z.B, dann könnte man bis item 99 waffen einbauen?

leider hab ich so meine probleme, dat mitm source geregelt zu kriegen, naja, vieleicht gibts bald idiotensichere tuts...

@ace24

kampagnen für UB musst du normalerweise in der ub-campaign utility einstellen, die maps sollten sich dann im richtigen ordner befinden (gleicher name wie die kampagne)

den anfangssektor kannst du glaub bei UB ich im normalfall nicht ändern (gibts vieleicht progs oder patches, weiss nicht)
vieleicht liegts ja daran.

in ja2 kopierst du deine karte einfach in den ordner "maps" im data-verzeichnis.

Verfasst: 30 Apr 2004, 10:25
von shadow the deat
Original geschrieben von smilingassassin
man könnte also die wedit tabellen verlängern, indem man diese line 275 ändert und dann die jeweiligen items verschiebt? so define first ammo 100 z.B, dann könnte man bis item 99 waffen einbauen?

leider hab ich so meine probleme, dat mitm source geregelt zu kriegen, naja, vieleicht gibts bald idiotensichere tuts...
müsste eigendlich gehn wenn weedit mit der deutschen bzw englischen 1.12 gehn
nachteil ist ich denk das Weedit es anders in ja2 schreiben wird bzw nicht alles

Verfasst: 02 Mai 2004, 17:18
von fatty
Also könnte amn rein theoretisch soviele Waffen adden wie man Lust und Laune hat ?

Mitm Source umzugehen ist in bestimmten Bereichen kein Prob für mich ... der is ähnlich aufgebaut wie der von Max Payne 2 .... naja n bisschen ähnlich.

Nur das compilen wird n Akt .... muss gucken wo ich n Prog herbekomm :D

Verfasst: 02 Mai 2004, 18:01
von shadow the deat
ja

aber das mit max payne weiß ich nicht :crazy:

Verfasst: 08 Mai 2004, 12:17
von shadow the deat
ok jetzt mal wieder was von mir :D die anderen sind ja alle Tot

:lhdevil:

so unter http://mitglied.lycos.de/fallendeath/ sich den Erweiterten Source und die Benötigten Daten ziehn

dann den Source als Debug compilen ( genauers in der Readme)
dann die Utils daten in den ja2ordner extrahieren (ist selbstentpackend also keine weitern Tools nötig)
die ja2.exe dann in editor umbenennen oder die editor.bat nach belieben mit nen Texeditor umändern
dann eigendlich nur noch mit der editor.bat öffnen jetzt kommt der normale betaeditor aber mit 50 Tilesets ;-)

zum hinzufügen bin ich auch in der readme eingegangen ist eigendlich nur ne Zeile im Code

was von nöten ist sind Kenntnisse mit Tilesetedit von der Basis aber dort gabs auch ne Anleitung :D
der hinzugefügte Ordner muss eigendlich nicht sein bzw mein Inhalt da wenn er leer ist ja2 auf die Generic Tileset zurückgreift
es ist aber zu beachten das man bei ja2 immer dann die Ordner anlegen muss im Tilesetordner
zb 50 ,51 ...............................................

so das wars :D

Verfasst: 10 Mai 2004, 15:32
von Mysterious Dr.X
Howdy Rowdies!

Ich muss mal ein bisschen Kritik einbringen. Also, ich glaube nicht, dass jemand mal versucht hat neue Waffen einzufügen, aber so wie es hier beschrieben ist, geht es nicht. Man kann so nur leere Slots überschreiben, was wohl nicht der Sinn eines Tutorials seien sollte, da es - laut Nitrat - schon vorher möglich war.

@smilingassassin,
ich rate dir ab die line 275 in der Item Types.h zu editieren, da du so die ganzen Bilder durcheinander bringst. Ich nehme jetzt einfach mal an Shadow the death(?) hat sein eigenes Tutorial nie angewandt.

Zum Waffentutorial noch was . . . es wird nicht erklärt, wie man eine neue Gegenstandsbeschreibung und neue Sounddateien zuweist. Wenn man ein Tutorial macht, dann doch bitte ganz und anhand von Beispielen/Bildern. Wenn mir mal jemand zeigen würde, wie man einen neuen Gegenstandsslot erfolgreich hinzufügt, wäre ich bereit ein ausführlicheres Tutorial zu schreiben.


Dr.X

Verfasst: 10 Mai 2004, 17:15
von shadow the deat
Original geschrieben von Mysterious Dr.X
Howdy Rowdies!

Ich muss mal ein bisschen Kritik einbringen. Also, ich glaube nicht, dass jemand mal versucht hat neue Waffen einzufügen, aber so wie es hier beschrieben ist, geht es nicht. Man kann so nur leere Slots überschreiben, was wohl nicht der Sinn eines Tutorials seien sollte, da es - laut Nitrat - schon vorher möglich war.

@smilingassassin,
ich rate dir ab die line 275 in der Item Types.h zu editieren, da du so die ganzen Bilder durcheinander bringst. Ich nehme jetzt einfach mal an Shadow the death(?) hat sein eigenes Tutorial nie angewandt.

Zum Waffentutorial noch was . . . es wird nicht erklärt, wie man eine neue Gegenstandsbeschreibung und neue Sounddateien zuweist. Wenn man ein Tutorial macht, dann doch bitte ganz und anhand von Beispielen/Bildern. Wenn mir mal jemand zeigen würde, wie man einen neuen Gegenstandsslot erfolgreich hinzufügt, wäre ich bereit ein ausführlicheres Tutorial zu schreiben.


Dr.X

sorry ich hab wirklich einiges Vegessen das lag aber am Zeitdruck
ich habs angewannt aber zu spät mitgekriegt um es zu ändern ich werd mich für euch wieder hinsetzen um es zu überarbeiten dauert aber erstmal da ich auch andere Projekte hab


dafür hab ich aber wenigsten das Tilesettut getestet :D

Verfasst: 10 Aug 2004, 00:00
von Tobeas
Mysterious Dr.X....is dir schonmal aufgefallen, dass es hier im forum andere tuts gibt, die genau dass beschreiben was bei shadows tut fehlt?
Man muss nich alles reinschreiben, wenn das was fehlt leicht woanders hergenommen werden kann.

aber zum tut selbst....es geht nich...wie myst es schon gesagt hat....hoffe das wird geedited ^^

ansonsten good job würd ich sagen. mach weiter so

Verfasst: 10 Aug 2004, 12:00
von shadow the deat
am besten ist ja das du noch lebst hast ja lange nichts von dir und dein Projekten was hören lassen :D

und das Thema mit den Tut hat sich schon lange erledigt hab blos vergessen noch was Dr.x zu schicken

:azzangel: wollte es eigendlich schon Anfang der Ferien machen

ok jetzt mal was einfaches

in der builddefines.h muss das
[PHP]#ifndef _BUILDDEFINES_H
#define _BUILDDEFINES_H

#include "Language Defines.h"

// Beta version
// #define JA2BETAVERSION

// Normal test version
// #define JA2TESTVERSION

// If we want to include the editor
//#define JA2EDITOR

#ifdef _DEBUG
#define JA2BETAVERSION
#define JA2EDITOR
#endif

// Do combinations
#ifdef JA2TESTVERSION
#define JA2BETAVERSION
#define JA2EDITOR
#endif

#ifdef JA2BETAVERSION
#define SGP_DEBUG
#define FORCE_ASSERTS_ON
#define SGP_VIDEO_DEBUGGING
#endif

//#define CRIPPLED_VERSION

// Huge speed and memory hog, but thorough -- will work with release builds.
// #define EXTREME_MEMORY_DEBUGGING

#endif[/PHP] stehn dann hab ihr wenn ihr im Debugmodus compieled dei Beta mit Debug und den Editor ps. ihr müsst ihn mit den Parameter -EDITORAUTO ändern
und extrem wichtig ihr braucht den CVS Source sonst gehts nicht da eine .lib fehlt die da nicht benötig wird

@ all die sich an den XML stören werde ich bald eine XML freie on stellen

Verfasst: 11 Aug 2004, 11:35
von shadow the deat
ok 2 neue Sachen

1. den Editor bei den normalen Source

man muss Strategic/Auto Resolve.c

in Zeile 57

[PHP]#include "vtuneapi.h"[/PHP]
in
[PHP]//#include "vtuneapi.h"[/PHP]

somit ist das dann deaktiviert :D

2. erstellen einer Deutschen Exe


die Language Defines.h muss so aussehn

[PHP]#ifndef __LANGUAGE_DEFINES_H
#define __LANGUAGE_DEFINES_H

//ONLY ONE OF THESE CAN BE DEFINED AT A TIME!

//#define ENGLISH
#define GERMAN
//#define RUSSIAN
//#define DUTCH
//#define POLISH

#define BLOOD_N_GORE_ENABLED



//if the language represents words as single chars
#ifdef TAIWAN
#define SINGLE_CHAR_WORDS
#endif

#endif[/PHP]

Erklärung Sachen die hinter // werden als Kommentare angesehn und nicht compielt

man könnte auch /**/ machen das hätte den Selben efekt