• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!

Готика 1: Исходники Готики

Статус
В этой теме нельзя размещать новые ответы.

Kerrax

Почетный форумчанин
Регистрация
19 Фев 2008
Сообщения
222
Благодарности
682
Баллы
220
  • Первое сообщение
  • #1
В настоящий момент силами меня и Vam'а идет работа над исходниками движка игры. Благодаря Vam'у работа уже идет над исходными кодом на языке C++, а не над ассемблером. Цель - сделать возможность модифицировать Готику по своему усмотрению - добавить полезные команды в язык Daedalus, подтянуть графику, улучшить физику и т.п. Но для этого предстоит еще очень много работы (хотя многое уже сделано). Необходимо отладить исходники (сейчас там очень много ошибок, игра то и дело вылетает), разобраться с принципом их работы и написать комментарии. Добиться устойчивой работы Г1, Г2 и модов. И потом уже заниматься модификациями движка. Мы с Vam'ом решили спросить, вдруг найдутся люди, которые захотят нам помочь. Сейчас нас всего двое. Если бы к нам присоединилось еще хотя бы 1-2 человека, работа пошла бы быстрее.

Требования к кандидатам:

1) Хорошее знание языка C++. Понимание принципов работы современных трехмерных движков не требуется, хотя и, безусловно, пойдет на пользу.

2) Согласие работать за просто так, бесплатно. Проект абсолютно некоммерческий. Продать результат нашего труда мы навряд ли сможем, даже если вдруг почему-то захотим (если только Jowood не подарит нам на это право).

3) Согласие работать в команде. То есть: а) член команды получает исходники всего движка полностью и обязан своими наработками делиться с другими членами команды; и б) член команды не может публиковать, распространять и передавать третьим лицам исходники движка или какие-либо их части без согласия тех членов команды, чей труд был затрачен на их создание.

Вот и все. Кто захочет к нам присоединяться, пишите.

Kerrax.
 

George_M

Участник форума
Регистрация
17 Дек 2010
Сообщения
692
Благодарности
18
Баллы
255
more, можно напрямую впихнуть новые классы, но нужно быть аккуратным - в декомпилинном варианте названия переменных отличаются от оригинала.
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
такая реализация в лучшем случае не заработает)
Хотя нада сматреть

Bump: ну вот пример класса oCNpc(г2)

PHP:
//
// Only for demonstration purposes. Usage at your own risk.
// Only for Gothic II version 2.6 (Report-Version 2.6_rev1)
//
////////////////////////////////////////////////////////////////////////////////
//                                                                            //
//                                  zCObject                                  //
//                                                                            //
////////////////////////////////////////////////////////////////////////////////
//NOTE: Bit field mask consts:     BitCount    FirstBit
const int zCObject_hashIndex = ((1 << 16) - 1) << 0;
class zCObject {
    var int    vfptr;          // 0x0000
    var int    refCtr;         // 0x0004 int
    var int    hashIndex;      // 0x0008 zWORD
    var int    hashNext;       // 0x000C zCObject*
    var string objectName;     // 0x0010 zSTRING
};
const int zCObject_Size = 36;  // 0x0024
////////////////////////////////////////////////////////////////////////////////
//                                                                            //
//                                   zCVob                                    //
//                                                                            //
////////////////////////////////////////////////////////////////////////////////
const int zCVob_bitfield0_showVisual                = ((1 << 1) - 1) <<  0;
const int zCVob_bitfield0_drawBBox3D                = ((1 << 1) - 1) <<  1;
const int zCVob_bitfield0_visualAlphaEnabled        = ((1 << 1) - 1) <<  2;
const int zCVob_bitfield0_physicsEnabled            = ((1 << 1) - 1) <<  3;
const int zCVob_bitfield0_staticVob                 = ((1 << 1) - 1) <<  4;
const int zCVob_bitfield0_ignoredByTraceRay         = ((1 << 1) - 1) <<  5;
const int zCVob_bitfield0_collDetectionStatic       = ((1 << 1) - 1) <<  6;
const int zCVob_bitfield0_collDetectionDynamic      = ((1 << 1) - 1) <<  7;
const int zCVob_bitfield0_castDynShadow             = ((1 << 2) - 1) <<  8;
const int zCVob_bitfield0_lightColorStatDirty       = ((1 << 1) - 1) << 10;
const int zCVob_bitfield0_lightColorDynDirty        = ((1 << 1) - 1) << 11;
const int zCVob_bitfield1_isInMovementMode          = ((1 << 2) - 1) <<  0;
const int zCVob_bitfield2_sleepingMode              = ((1 << 2) - 1) <<  0;
const int zCVob_bitfield2_mbHintTrafoLocalConst     = ((1 << 1) - 1) <<  2;
const int zCVob_bitfield2_mbInsideEndMovementMethod = ((1 << 1) - 1) <<  3;
const int zCVob_bitfield3_visualCamAlign            = ((1 << 2) - 1) <<  0;
const int zCVob_bitfield4_collButNoMove             = ((1 << 4) - 1) <<  0;
const int zCVob_bitfield4_dontWriteIntoArchive      = ((1 << 1) - 1) <<  4;
const int zCVob_bitfield4_bIsInWater                = ((1 << 1) - 1) <<  5;
const int zCVob_bitfield4_bIsAmbientVob             = ((1 << 1) - 1) <<  6;
class zCVob {
//  zCObject {
        var int    vfptr;
        var int    refCtr;
        var int    hashIndex;
        var int    hashNext;
        var string objectName;
//  }
    var int        globalVobTreeNode;         // 0x0024 zCTree<zCVob>*
    var int        lastTimeDrawn;             // 0x0028 zTFrameCtr
    var int        lastTimeCollected;         // 0x002C zDWORD
//  zCArray<zCBspLeaf*> vobLeafList {
        var int    vobLeafList_array;         // 0x0030 zCBspLeaf**
        var int    vobLeafList_numAlloc;      // 0x0034 int
        var int    vobLeafList_numInArray;    // 0x0038 int
//  }
    var int        trafoObjToWorld[16];       // 0x003C zMATRIX4
//  zTBBox3D bbox3D {
        var int    bbox3D_mins[3];            // 0x007C zPOINT3
        var int    bbox3D_maxs[3];            // 0x0088 zPOINT3
//  }
//  zTBSphere3D bsphere3D {
        var int    bsphere3D_center[3];       // 0x0094 zPOINT3
        var int    bsphere3D_radius;          // 0x00A0 zVALUE
//  }
//  zCArray<zCVob*> touchVobList {
        var int    touchVobList_array;        // 0x00A4 zCVob**
        var int    touchVobList_numAlloc;     // 0x00A8 int
        var int    touchVobList_numInArray;   // 0x00AC int
//  }
    var int        type;                      // 0x00B0 zTVobType
    var int        groundShadowSizePacked;    // 0x00B4 zDWORD
    var int        homeWorld;                 // 0x00B8 zCWorld*
    var int        groundPoly;                // 0x00BC zCPolygon*
    var int        callback_ai;               // 0x00C0 zCAIBase*
    var int        trafo;                     // 0x00C4 zMATRIX4*
    var int        visual;                    // 0x00C8 zCVisual*
    var float      visualAlpha;               // 0x00CC zREAL
    var int        m_fVobFarClipZScale;       // 0x00D0 zREAL
    var int        m_AniMode;                 // 0x00D4 zTAnimationMode
    var int        m_aniModeStrength;         // 0x00D8 zREAL
    var int        m_zBias;                   // 0x00DC int
    var int        rigidBody;                 // 0x00E0 zCRigidBody*
    var int        lightColorStat;            // 0x00E4 zCOLOR
    var int        lightColorDyn;             // 0x00E8 zCOLOR
    var int        lightDirectionStat[3];     // 0x00EC zVEC3
    var int        vobPresetName;             // 0x00F8 zSTRING*
    var int        eventManager;              // 0x00FC zCEventManager*
    var int        nextOnTimer;               // 0x0100 zREAL
    var int        vob_bitfield[5];           // 0x0104 zCVob_bitfieldX_Xxx
    var int        m_poCollisionObjectClass;  // 0x0118 zCCollisionObjectDef*
    var int        m_poCollisionObject;       // 0x011C zCCollisionObject*
};
const int zCVob_Size = 288;                   // 0x0120
////////////////////////////////////////////////////////////////////////////////
//                                                                            //
//                                   oCNpc                                    //
//                                                                            //
////////////////////////////////////////////////////////////////////////////////
const int oCMagFrontier_bitfield_isWarning  = ((1 << 1) - 1) << 0;
const int oCMagFrontier_bitfield_isShooting = ((1 << 1) - 1) << 1;
const int oCNpc_bitfield0_showaidebug          = ((1 <<  1) - 1) <<  0;
const int oCNpc_bitfield0_showNews             = ((1 <<  1) - 1) <<  1;
const int oCNpc_bitfield0_csAllowedAsRole      = ((1 <<  1) - 1) <<  2;
const int oCNpc_bitfield0_isSummoned           = ((1 <<  1) - 1) <<  3;
const int oCNpc_bitfield0_respawnOn            = ((1 <<  1) - 1) <<  4;
const int oCNpc_bitfield0_movlock              = ((1 <<  1) - 1) <<  5;
const int oCNpc_bitfield0_drunk                = ((1 <<  1) - 1) <<  6;
const int oCNpc_bitfield0_mad                  = ((1 <<  1) - 1) <<  7;
const int oCNpc_bitfield0_overlay_wounded      = ((1 <<  1) - 1) <<  8;
const int oCNpc_bitfield0_inOnDamage           = ((1 <<  1) - 1) <<  9;
const int oCNpc_bitfield0_autoremoveweapon     = ((1 <<  1) - 1) << 10;
const int oCNpc_bitfield0_openinventory        = ((1 <<  1) - 1) << 11;
const int oCNpc_bitfield0_askroutine           = ((1 <<  1) - 1) << 12;
const int oCNpc_bitfield0_spawnInRange         = ((1 <<  1) - 1) << 13;
const int oCNpc_bitfield1_body_TexVarNr        = ((1 << 16) - 1) <<  0;
const int oCNpc_bitfield1_body_TexColorNr      = ((1 << 16) - 1) << 16;
const int oCNpc_bitfield2_head_TexVarNr        = ((1 << 16) - 1) <<  0;
const int oCNpc_bitfield2_teeth_TexVarNr       = ((1 << 16) - 1) << 16;
const int oCNpc_bitfield3_guildTrue            = ((1 <<  8) - 1) <<  0;
const int oCNpc_bitfield3_drunk_heal           = ((1 <<  8) - 1) <<  8;
const int oCNpc_bitfield3_mad_heal             = ((1 <<  8) - 1) << 16;
const int oCNpc_bitfield3_spells               = ((1 <<  8) - 1) << 24;
const int oCNpc_bitfield4_bodyState            = ((1 << 19) - 1) <<  0;
const int oCNpc_bitfield4_m_bAniMessageRunning = ((1 <<  1) - 1) << 19;
const int oTRobustTrace_bitfield_stand                = ((1 << 1) - 1) << 0;
const int oTRobustTrace_bitfield_dirChoosed           = ((1 << 1) - 1) << 1;
const int oTRobustTrace_bitfield_exactPosition        = ((1 << 1) - 1) << 2;
const int oTRobustTrace_bitfield_targetReached        = ((1 << 1) - 1) << 3;
const int oTRobustTrace_bitfield_standIfTargetReached = ((1 << 1) - 1) << 4;
const int oTRobustTrace_bitfield_waiting              = ((1 << 1) - 1) << 5;
const int oTRobustTrace_bitfield_isObstVobSmall       = ((1 << 1) - 1) << 6;
const int oTRobustTrace_bitfield_targetVisible        = ((1 << 1) - 1) << 7;
const int oTRobustTrace_bitfield_useChasmChecks       = ((1 << 1) - 1) << 8;
class oCNpc {
//  zCVob {
//      zCObject {
            var int    vfptr;
            var int    refCtr;
            var int    hashIndex;
            var int    hashNext;
            var string objectName;
//      }
        var int        globalVobTreeNode;
        var int        lastTimeDrawn;
        var int        lastTimeCollected;
        var int        vobLeafList_array;
        var int        vobLeafList_numAlloc;
        var int        vobLeafList_numInArray;
        var int        trafoObjToWorld[16];
        var int        bbox3D_mins[3];
        var int        bbox3D_maxs[3];
        var int        bsphere3D_center[3];
        var int        bsphere3D_radius;
        var int        touchVobList_array;
        var int        touchVobList_numAlloc;
        var int        touchVobList_numInArray;
        var int        type;
        var int        groundShadowSizePacked;
        var int        homeWorld;
        var int        groundPoly;
        var int        callback_ai;
        var int        trafo;
        var int        visual;
        var int        visualAlpha;
        var int        m_fVobFarClipZScale;
        var int        m_AniMode;
        var int        m_aniModeStrength;
        var int        m_zBias;
        var int        rigidBody;
        var int        lightColorStat;
        var int        lightColorDyn;
        var int        lightDirectionStat[3];
        var int        vobPresetName;
        var int        eventManager;
        var int        nextOnTimer;
        var int        vob_bitfield[5];
        var int        m_poCollisionObjectClass;
        var int        m_poCollisionObject;
//  }
//  C_NPC {
        var int        idx;                                       // 0x0120 int
        var string     name;                                      // 0x0124 zSTRING[5]
        var string     name1;
        var string     name2;
        var string     name3;
        var string     name4;
        var string     slot;                                      // 0x0188 zSTRING
        var string     effect;                                    // 0x019C zSTRING
        var int        npcType;                                   // 0x01B0 int
        var int        variousFlags;                              // 0x01B4 int
        var int        attribute[8];                              // 0x01B8 int[NPC_ATR_MAX]
        var int        hitChance[5];                              // 0x01D8 int[NPC_HITCHANCE_MAX]
        var int        protection[8];                             // 0x01EC int[oEDamageIndex_MAX]
        var int        damage[8];                                 // 0x020C int[oEDamageIndex_MAX]
        var int        damagetype;                                // 0x022C int
        var int        guild;                                     // 0x0230 int
        var int        level;                                     // 0x0234 int
        var func       mission[5];                                // 0x0238 int[NPC_MIS_MAX]
        var int        fighttactic;                               // 0x024C int
        var int        fmode;                                     // 0x0250 int
        var int        voice;                                     // 0x0254 int
        var int        voicePitch;                                // 0x0258 int
        var int        mass;                                      // 0x025C int
        var func       daily_routine;                             // 0x0260 int
        var func       startAIState;                              // 0x0264 int
        var string     spawnPoint;                                // 0x0268 zSTRING
        var int        spawnDelay;                                // 0x027C int
        var int        senses;                                    // 0x0280 int
        var int        senses_range;                              // 0x0284 int
        var int        aiscriptvars[100];                         // 0x0288 int[100]
        var string     wpname;                                    // 0x0418 zSTRING
        var int        experience_points;                         // 0x042C zUINT32
        var int        experience_points_next_level;              // 0x0430 zUINT32
        var int        learn_points;                              // 0x0434 zUINT32
        var int        bodyStateInterruptableOverride;            // 0x0438 int
        var int        noFocus;                                   // 0x043C zBOOL
//  }
    var int            parserEnd;                                 // 0x0440 int
    var int            bloodEnabled;                              // 0x0444 int
    var int            bloodDistance;                             // 0x0448 int
    var int            bloodAmount;                               // 0x044C int
    var int            bloodFlow;                                 // 0x0450 int
    var string         bloodEmitter;                              // 0x0454 zSTRING
    var string         bloodTexture;                              // 0x0468 zSTRING
    var int            didHit;                                    // 0x047C zBOOL
    var int            didParade;                                 // 0x0480 zBOOL
    var int            didShoot;                                  // 0x0484 zBOOL
    var int            hasLockedEnemy;                            // 0x0488 zBOOL
    var int            isDefending;                               // 0x048C zBOOL
    var int            wasAiming;                                 // 0x0490 zBOOL
    var int            lastAction;                                // 0x0494 oCNpc::TFAction
    var int            enemy;                                     // 0x0498 oCNpc*
    var int            speedTurn;                                 // 0x049C zREAL
    var int            foundFleePoint;                            // 0x04A0 zBOOL
    var int            reachedFleePoint;                          // 0x04A4 zBOOL
    var int            vecFlee[3];                                // 0x04A8 zVEC3
    var int            posFlee[3];                                // 0x04B4 zVEC3
    var int            waypointFlee;                              // 0x04C0 zCWaypoint*
//  oTRobustTrace rbt {
        var int        rbt_bitfield;                              // 0x04C4 oTRobustTrace_bitfield_Xxx
        var int        rbt_targetPos[3];                          // 0x04C8 zVEC3
        var int        rbt_targetVob;                             // 0x04D4 zCVob*
        var int        rbt_obstVob;                               // 0x04D8 zCVob*
        var int        rbt_targetDist;                            // 0x04DC zREAL
        var int        rbt_lastTargetDist;                        // 0x04E0 zREAL
        var int        rbt_maxTargetDist;                         // 0x04E4 zREAL
        var int        rbt_dirTurn;                               // 0x04E8 zREAL
        var int        rbt_timer;                                 // 0x04EC zREAL
        var int        rbt_dirFirst[3];                           // 0x04F0 zVEC3
        var int        rbt_dirLastAngle;                          // 0x04FC zREAL
//      zCArray<oTDirectionInfo*> lastDirections {
            var int    rbt_lastDirections_array;                  // 0x0500 oTDirectionInfo**
            var int    rbt_lastDirections_numAlloc;               // 0x0504 int
            var int    rbt_lastDirections_numInArray;             // 0x0508 int
//      }
        var int        rbt_frameCtr;                              // 0x050C int
        var int        rbt_targetPosArray[15];                    // 0x0510 zVEC3[5]
        var int        rbt_targetPosCounter;                      // 0x054C int
        var int        rbt_targetPosIndex;                        // 0x0550 int
        var int        rbt_checkVisibilityTime;                   // 0x0554 zREAL
        var int        rbt_positionUpdateTime;                    // 0x0558 zREAL
        var int        rbt_failurePossibility;                    // 0x055C zREAL
//  }
//  zCList<oCNpcTimedOverlay> timedOverlays {
        var int        timedOverlays_data;                        // 0x0560 oCNpcTimedOverlay*
        var int        timedOverlays_next;                        // 0x0564 zCList<oCNpcTimedOverlay>*
//  }
//  zCArray<oCNpcTalent*> talents {
        var int        talents_array;                             // 0x0568 oCNpcTalent**
        var int        talents_numAlloc;                          // 0x056C int
        var int        talents_numInArray;                        // 0x0570 int
//  }
    var int            spellMana;                                 // 0x0574 int
//  oCMagFrontier mag Frontier {
        var int        magFrontier_warningFX;                     // 0x0578 oCVisualFX*
        var int        magFrontier_shootFX;                       // 0x057C oCVisualFX*
        var int        magFrontier_npc;                           // 0x0580 oCNpc*
        var int        magFrontier_bitfield;                      // 0x0584 oCMagFrontier_bitfield_Xxx
//  }
//  oCNpc_States state {
        var int        state_vfptr;                               // 0x0588
        var string     state_name;                                // 0x058C zSTRING
        var int        state_npc;                                 // 0x05A0 oCNpc*
//      TNpcAIState curState {
            var int    state_curState_index;                      // 0x05A4 int
            var int    state_curState_loop;                       // 0x05A8 int
            var int    state_curState_end;                        // 0x05AC int
            var int    state_curState_timeBehaviour;              // 0x05B0 int
            var int    state_curState_restTime;                   // 0x05B4 zREAL
            var int    state_curState_phase;                      // 0x05B8 int
            var int    state_curState_valid;                      // 0x05BC zBOOL
            var string state_curState_name;                       // 0x05C0 zSTRING
            var int    state_curState_stateTime;                  // 0x05D4 zREAL
            var int    state_curState_prgIndex;                   // 0x05D8 int
            var int    state_curState_isRtnState;                 // 0x05DC zBOOL
//      }
//      TNpcAIState nextState {
            var int    state_nextState_index;                     // 0x05E0 int
            var int    state_nextState_loop;                      // 0x05E4 int
            var int    state_nextState_end;                       // 0x05E8 int
            var int    state_nextState_timeBehaviour;             // 0x05EC int
            var int    state_nextState_restTime;                  // 0x05F0 zREAL
            var int    state_nextState_phase;                     // 0x05F4 int
            var int    state_nextState_valid;                     // 0x05F8 zBOOL
            var string state_nextState_name;                      // 0x05FC zSTRING
            var int    state_nextState_stateTime;                 // 0x0610 zREAL
            var int    state_nextState_prgIndex;                  // 0x0614 int
            var int    state_nextState_isRtnState;                // 0x0618 zBOOL
//      }
        var int        state_lastAIState;                         // 0x061C int
        var int        state_hasRoutine;                          // 0x0620 zBOOL
        var int        state_rtnChanged;                          // 0x0624 zBOOL
        var int        state_rtnBefore;                           // 0x0628 oCRtnEntry*
        var int        state_rtnNow;                              // 0x062C oCRtnEntry*
        var int        state_rtnRoute;                            // 0x0630 zCRoute*
        var int        state_rtnOverlay;                          // 0x0634 zBOOL
        var int        state_rtnOverlayCount;                     // 0x0638 int
        var int        state_walkmode_routine;                    // 0x063C int
        var int        state_weaponmode_routine;                  // 0x0640 zBOOL
        var int        state_startNewRoutine;                     // 0x0644 zBOOL
        var int        state_aiStateDriven;                       // 0x0648 int
        var int        state_aiStatePosition[3];                  // 0x064C zVEC3
        var int        state_parOther;                            // 0x0658 oCNpc*
        var int        state_parVictim;                           // 0x065C oCNpc*
        var int        state_parItem;                             // 0x0660 oCItem*
        var int        state_rntChangeCount;                      // 0x0664 int
//  }
//  oCNpcInventory {
//      oCItemContainer inventory2 {
            var int    inventory2_vfptr;                          // 0x0668
            var int    inventory2_contents;                       // 0x066C zCListSort<oCItem>*
            var int    inventory2_npc;                            // 0x0670 oCNpc*
            var string inventory2_titleText;                      // 0x0674 zSTRING
            var int    inventory2_invMode;                        // 0x0688 int
            var int    inventory2_selectedItem;                   // 0x068C int
            var int    inventory2_offset;                         // 0x0690 int
            var int    inventory2_maxSlotsCol;                    // 0x0694 int
            var int    inventory2_maxSlotsColScr;                 // 0x0698 int
            var int    inventory2_maxSlotsRow;                    // 0x069C int
            var int    inventory2_maxSlotsRowScr;                 // 0x06A0 int
            var int    inventory2_maxSlots;                       // 0x06A4 int
            var int    inventory2_marginTop;                      // 0x06A8 int
            var int    inventory2_marginLeft;                     // 0x06AC int
            var int    inventory2_frame;                          // 0x06B0 zBOOL
            var int    inventory2_right;                          // 0x06B4 zBOOL
            var int    inventory2_ownList;                        // 0x06B8 zBOOL
            var int    inventory2_prepared;                       // 0x06BC zBOOL
            var int    inventory2_passive;                        // 0x06C0 zBOOL
            var int    inventory2_TransferCount;                  // 0x06C4 zINT
            var int    inventory2_viewTitle;                      // 0x06C8 zCView*
            var int    inventory2_viewBack;                       // 0x06CC zCView*
            var int    inventory2_viewItem;                       // 0x06D0 zCView*
            var int    inventory2_viewItemActive;                 // 0x06D4 zCView*
            var int    inventory2_viewItemHightlighted;           // 0x06D8 zCView*
            var int    inventory2_viewItemActiveHighlighted;      // 0x06DC zCView*
            var int    inventory2_viewItemInfo;                   // 0x06E0 zCView*
            var int    inventory2_viewItemInfoItem;               // 0x06E4 zCView*
            var int    inventory2_textView;                       // 0x06E8 zCView*
            var int    inventory2_viewArrowAtTop;                 // 0x06EC zCView*
            var int    inventory2_viewArrowAtBottom;              // 0x06F0 zCView*
            var int    inventory2_rndWorld;                       // 0x06F4 zCWorld*
            var int    inventory2_posx;                           // 0x06F8 int
            var int    inventory2_posy;                           // 0x06FC int
            var int    inventory2_m_bManipulateItemsDisabled;     // 0x0700 zBOOL
            var int    inventory2_m_bCanTransferMoreThanOneItem;  // 0x0704 zBOOL
//      }
        var int        inventory2_owner;                          // 0x0708 oCNpc*
        var int        inventory2_packAbility;                    // 0x070C zBOOL
//      zCListSort<oCItem> inventory {
            var int    inventory2_inventory_Compare;              // 0x0710 int(_cdecl*)(oCItem*,oCItem*)
            var int    inventory2_inventory_data;                 // 0x0714 oCItem*
            var int    inventory2_inventory_next;                 // 0x0718 zCListSort<oCItem>*
//      }
        var string     inventory2_packString;                     // 0x071C zSTRING
//        var int        inventory2_maxSlots;                       // 0x0730 int
//  }
    var int            trader;                                    // 0x0734 oCItemContainer*
    var int            tradeNpc;                                  // 0x0738 oCNpc*
    var int            rangeToPlayer;                             // 0x073C zREAL
//  zCArray<zTSoundHandle> listOfVoiceHandles {
        var int        listOfVoiceHandles_array;                  // 0x0740 zTSoundHandle*
        var int        listOfVoiceHandles_numAlloc;               // 0x0744 int
        var int        listOfVoiceHandles_numInArray;             // 0x0748 int
//  }
    var int            voiceIndex;                                // 0x074C int
//  zCArray<oCVisualFX*> effectList {
        var int        effectList_array;                          // 0x0750 oCVisualFX**
        var int        effectList_numAlloc;                       // 0x0754 int
        var int        effectList_numInArray;                     // 0x0758 int
//  }
    var int            npc_bitfield[5];                           // 0x075C oCNpc_bitfieldX_Xxx
    var int            instanz;                                   // 0x0770 int
    var string         mds_name;                                  // 0x0774 zSTRING
    var string         body_visualName;                           // 0x0788 zSTRING
    var string         head_visualName;                           // 0x079C zSTRING
    var int            model_scale[3];                            // 0x07B0 VEC3
    var int            model_fatness;                             // 0x07BC zREAL
    var int            namenr;                                    // 0x07C0 int
    var int            hpHeal;                                    // 0x07C4 zREAL
    var int            manaHeal;                                  // 0x07C8 zREAL
    var int            swimtime;                                  // 0x07CC zREAL
    var int            divetime;                                  // 0x07D0 zREAL
    var int            divectr;                                   // 0x07D4 zREAL
    var int            fireVob;                                   // 0x07D8 zCVob*
    var int            fireDamage;                                // 0x07DC int
    var int            fireDamageTimer;                           // 0x07E0 zREAL
    var int            attitude;                                  // 0x07E4 int
    var int            tmp_attitude;                              // 0x07E8 int
    var int            attTimer;                                  // 0x07EC zREAL
    var int            knowsPlayer;                               // 0x07F0 int
    var int            percList[66];                              // 0x07F4 TNpcPerc[NPC_PERC_MAX] { int percID; int percFunc }
    var int            percActive;                                // 0x08FC int
    var int            percActiveTime;                            // 0x0900 zREAL
    var int            percActiveDelta;                           // 0x0904 zREAL
    var int            overrideFallDownHeight;                    // 0x0908 zBOOL
    var int            fallDownHeight;                            // 0x090C zREAL
    var int            fallDownDamage;                            // 0x0910 int
    var int            mag_book;                                  // 0x0914 oCMag_Book*
//  zCList<oCSpell> activeSpells {
        var int        activeSpells_data;                         // 0x0918 oCSpell*
        var int        activeSpells_next;                         // 0x091C int
//  }
    var int            lastHitSpellID;                            // 0x0920 int
    var int            lastHitSpellCat;                           // 0x0924 int
//  zCArray<zSTRING> activeOverlays {
        var int        activeOverlays_array;                      // 0x0928 zSTRING*
        var int        activeOverlays_numAlloc;                   // 0x092C int
        var int        activeOverlays_numInArray;                 // 0x0930 int
//  }
    var int            askbox;                                    // 0x0934 oCAskBox*
    var int            askYes;                                    // 0x0938 int
    var int            askNo;                                     // 0x093C int
    var int            canTalk;                                   // 0x0940 zREAL
    var int            talkOther;                                 // 0x0944 oCNpc*
    var int            info;                                      // 0x0948 oCInfo*
    var int            news;                                      // 0x094C oCNews*
    var int            curMission;                                // 0x0950 oCMission*
//  oCNewsMemory knownNews {
        var int        knownNews_vfptr;                           // 0x0954
//      zCList<oCNews> iknow {
            var int    knownNews_iknow_data;                      // 0x0958 oCNews*
            var int    knownNews_iknow_next;                      // 0x095C zCList<oCNews>*
//      }
//  }
    var int            carry_vob;                                 // 0x0960 zCVob*
    var int            interactMob;                               // 0x0964 oCMobInter*
    var int            interactItem;                              // 0x0968 oCItem*
    var int            interactItemCurrentState;                  // 0x096C int
    var int            interactItemTargetState;                   // 0x0970 int
    var int            script_aiprio;                             // 0x0974 int
    var int            old_script_state;                          // 0x0978 int
    var int            human_ai;                                  // 0x097C oCAIHuman*
    var int            anictrl;                                   // 0x0980 oCAniCtrl_Human*
    var int            route;                                     // 0x0984 zCRoute*
    var int            damageMul;                                 // 0x0988 zREAL
    var int            csg;                                       // 0x098C oCNpcMessage*
    var int            lastLookMsg;                               // 0x0990 oCNpcMessage*
    var int            lastPointMsg;                              // 0x0994 oCNpcMessage*
//  zCArray<zCVob*> vobList {
        var int        vobList_array;                             // 0x0998 zCVob**
        var int        vobList_numAlloc;                          // 0x099C int
        var int        vobList_numInArray;                        // 0x09A0 int
//  }
    var int            vobcheck_time;                             // 0x09A4 zREAL
    var int            pickvobdelay;                              // 0x09A8 zREAL
    var int            focus_vob;                                 // 0x09AC zCVob*
//  zCArray<TNpcSlot*> invSlot {
        var int        invSlot_array;                             // 0x09B0 TNpcSlot**
        var int        invSlot_numAlloc;                          // 0x09B4 int
        var int        invSlot_numInArray;                        // 0x09B8 int
//  }
//  zCArray<TNpcSlot*> tmpSlotList {
        var int        tmpSlotList_array;                         // 0x09BC TNpcSlot**
        var int        tmpSlotList_numAlloc;                      // 0x09C0 int
        var int        tmpSlotList_numInArray;                    // 0x09C4 int
//  }
    var int            fadeAwayTime;                              // 0x09C8 zREAL
    var int            respawnTime;                               // 0x09CC zREAL
    var int            selfDist;                                  // 0x09D0 zREAL
    var int            fightRangeBase;                            // 0x09D4 int
    var int            fightRangeFist;                            // 0x09D8 int
    var int            fightRangeG;                               // 0x09DC int
    var int            fight_waitTime;                            // 0x09E0 zREAL
    var int            fight_waitForAniEnd;                       // 0x09E4 zTModelAniID
    var int            fight_lastStrafeFrame;                     // 0x09E8 zREAL
    var int            soundType;                                 // 0x09EC int
    var int            soundVob;                                  // 0x09F0 zCVob*
    var int            soundPosition[3];                          // 0x09F4 zVEC3
    var int            playerGroup;                               // 0x0A00 zCPlayerGroup*
};
const int oCNpc_Size = 2564;                                      // 0x0A04
////////////////////////////////////////////////////////////////////////////////
//                                                                            //
//                                   oCNews                                   //
//                                                                            //
////////////////////////////////////////////////////////////////////////////////
class oCNews {
    var int    vfptr;         // 0x0000
    var int    told;          // 0x0004 zBOOL
    var int    spread_time;   // 0x0008 zREAL
    var int    spreadType;    // 0x000C oTNewsSpreadType
    var int    news_id;       // 0x0010 int
    var int    gossip;        // 0x0014 zBOOL
    var int    mNpcWitness;   // 0x0018 oCNpc*
    var int    mNpcOffender;  // 0x001C oCNpc*
    var int    mNpcVictim;    // 0x0020 oCNpc*
    var string witnessName;   // 0x0024 zSTRING
    var string offenderName;  // 0x0038 zSTRING
    var string victimName;    // 0x004C zSTRING
    var int    guildvictim;   // 0x0060 zBOOL
};
const int oCNews_Size = 100;

Bump:
more, можно напрямую впихнуть новые классы, но нужно быть аккуратным - в декомпилинном варианте названия переменных отличаются от оригинала.
В Смысле? То что названия могут отличца это не факт, ибо название всех переменных было полностью восстановлено из дебаг инфы г1.
Еслия не прав, more по правь мну.
 

more

Участник форума
Регистрация
6 Окт 2008
Сообщения
13
Благодарности
0
Баллы
150
Названия переменных-членов класса вообще не играют никакой роли, что в C++, что в скриптах. Главное смещение в классе и тип.

Про создание нового класса в скрипте с нуля ничего не знаю.
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Вот, я отомже гворю, это нужно связыватся с немцами, ибо они это активно делали.

Bump: А вот насчет скриптов (в ссмысле не играют роли) это еще нужно проверить...
 

George_M

Участник форума
Регистрация
17 Дек 2010
Сообщения
692
Благодарности
18
Баллы
255
Названия переменных роль играть будут точно - врядли двиг игры поймет, что от него хотят, если название одних и тех же переменных в нем и в скриптах будет различным.
А то, что названия поменялись легко проверить - сравнить декомпилированые с оригинальными - поисчезали подчеркивания в названиях, добавилась приставка (ну ее легко убрать - она зависит от типа переменной)
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Ммм, а ты в курсе что в скомпиленной проге у переменных названий вообще нету?) разви чтотото типа var1-1000000, ибо при компиляции все названия переменных, функций и тд теряюца.*flowers*

Bump: И какбы ты не старался, если нету дебаг инфы, то названия ты не найдешь если изначально не знаешь, вот такие вот дела.
 

George_M

Участник форума
Регистрация
17 Дек 2010
Сообщения
692
Благодарности
18
Баллы
255
Сатурас, ты классы декомпиленные смотрел? Там смещение в классе не везде есть, и если оно завязано на определенное раньше, то с названиями лучше не шутить.
З.Ы. Я могу и тормозить конечно. Поправь, если это так.

З.Ы.Ы. Кстати, а зачем в скомпиленых скриптах названия переменных сохраняются в явном виде?
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
З.Ы.Ы. Кстати, а зачем в скомпиленых скриптах названия переменных сохраняются в явном виде?
Ммм, просто так устроен класс zCParser=)
Да и декомпилить программу, и скрипты это АБСОЛЮТНО разные вещи, скрипты можно декмопилить простой прогой, а вот для декомпиляции программы на С++ нужно как минимум знание асма, и очень хорошее знание С++, и времени этой займет мягко говоря не мало, да и принцыпы компиляции разные.
Скрипты компиляятся как набор строчных параметров и массивов.
 

George_M

Участник форума
Регистрация
17 Дек 2010
Сообщения
692
Благодарности
18
Баллы
255
Saturas, спасибо за разъяснения. По я не знаю как именно и что интересует двиг в скриптах, и поэтому стараюсь просто делать все по аналогии. Так, на всякий случай: а то вдруг названия переменных в скриптах при задании классов критичны, раз уж они зачем-то остаются после компиляции;)
 

Vincento Law

Участник форума
Регистрация
22 Дек 2008
Сообщения
139
Благодарности
0
Баллы
165
Быть может поздно, но мог бы присоединиться к работе.
Ассемблер не знаю, т.к. буду проходить его только на втором курсе =)
На с++ прогаю только (или уже) год, постоянно совершенствуюсь. Готов помочь чем смогу!
К сожалению никогда не занимался дизассемблированием, слабо представляю как восстанавливается код программы.
Пойму, если не возьмёте, я не самый лучший помощник наверно)
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Saturas, спасибо за разъяснения. По я не знаю как именно и что интересует двиг в скриптах, и поэтому стараюсь просто делать все по аналогии. Так, на всякий случай: а то вдруг названия переменных в скриптах при задании классов критичны, раз уж они зачем-то остаются после компиляции;)
Понимаешь, затем они и остаются чтобы их копилятор понял,(ибо они зашиты в компиляторе ) а вот это наши "новые" классы я даже не знаю как их обрабатывает компилятор*???*:-\

Bump: Кстати, сейчас ради прикола в oCNpc поменяю пару имен переменных, и гляну что убдет

Bump: Только что менял имена переменных в класе, и в игре лично я изменений не заметил, важна только структура класса походу, ну и смещения.
 

George_M

Участник форума
Регистрация
17 Дек 2010
Сообщения
692
Благодарности
18
Баллы
255
Я заметил расхождения в типах переменных в классах в Икарусе и декомпилированных (они, кстати, похоже правильнее - т.к. совпадают с данными Нико). Расхождения типа float местами заменен на int - размер у них одинаковый, так что на смещения это не повлияет. Еще в декомпилированым func заменен на int (размер у них тоже одинаковый).
Будет ли такое расхождение типов критичным для всего класса или достаточно просто не работать с подобными переменными и класс проблем у экзешника не вызовет?
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Будет, я чтобы сделать на г2а живые статуи и тд, меня где нужно на флоат и тд.

Bump: Так что тип переменных это открытый вопрос.
 

George_M

Участник форума
Регистрация
17 Дек 2010
Сообщения
692
Благодарности
18
Баллы
255
Сатурас, если неправильным тип переменной с которой планируешь работать, то вопрос даже не стоит. Я про те, которые использовать не собираешься.

И что на счет заменимости func на int? В декомпилиных классах то что в оригинале там было именно func видно по приставке в названии переменной. Замену на int производить можно или это просто ошибка какая-то?
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Если речь идет о стандартных класса C_NPC и тд, то менять нельзя там ничего, менять можно(и нужно) только в классах двига типа oCNpc
ибо там ошибок может быть много вплане типов.

Сатурас, если неправильным тип переменной с которой планируешь работать, то вопрос даже не стоит. Я про те, которые использовать не собираешься.
Невлияют.
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.815
Баллы
995
Посты по Сурсеру перенес в соответствующую тему.
 

Robar _III

Забанен
Регистрация
5 Дек 2011
Сообщения
225
Благодарности
7
Баллы
185
Насколько я понял работа стала?
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.860
Благодарности
6.740
Баллы
1.625
Правильней будет сказать - временно заморожена.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу