diff --git a/src/fakerw/fake.cpp b/src/fakerw/fake.cpp index f2232e99..7530e994 100644 --- a/src/fakerw/fake.cpp +++ b/src/fakerw/fake.cpp @@ -731,6 +731,7 @@ RpGeometry *_rpGeometrySetSurfaceProperties(RpGeometry *geometry, const RwSurfac RwFrame *RpClumpGetFrame(const RpClump * clump) { return clump->getFrame(); } RpClump *RpClumpSetFrame(RpClump * clump, RwFrame * frame) { clump->setFrame(frame); return clump; } RpClump *RpClumpForAllAtomics(RpClump * clump, RpAtomicCallBack callback, void *pData) { + //if(!clump) { return nil; } FORLIST(lnk, clump->atomics) if(callback(Atomic::fromClump(lnk), pData) == nil) break; diff --git a/src/modelinfo/BaseModelInfo.cpp b/src/modelinfo/BaseModelInfo.cpp index 9af21da0..84eab888 100644 --- a/src/modelinfo/BaseModelInfo.cpp +++ b/src/modelinfo/BaseModelInfo.cpp @@ -131,8 +131,10 @@ void CBaseModelInfo::SetModelName(const char *name) { m_nameKey = CKeyGen::GetUppercaseKey(name); - if (!gUseChunkFiles) + if(!gUseChunkFiles) { + if(!m_name) { m_name = new char[MAX_MODEL_NAME]; } // mazahaka tmp fix NULL in reload to new strcpy(m_name, name); + } } void diff --git a/src/modelinfo/ModelInfo.h b/src/modelinfo/ModelInfo.h index 60a5e98f..9dda4398 100644 --- a/src/modelinfo/ModelInfo.h +++ b/src/modelinfo/ModelInfo.h @@ -46,6 +46,7 @@ public: static int32 GetNumModelInfos(void) { return msNumModelInfos; } static CBaseModelInfo *GetModelInfo(const char *name, int *id); + //__declspec(noinline) static CBaseModelInfo *GetModelInfo(int id){ if(id < 0 || id >= msNumModelInfos) return nil; diff --git a/src/modelinfo/VehicleModelInfo.cpp b/src/modelinfo/VehicleModelInfo.cpp index 21583709..20d37d89 100644 --- a/src/modelinfo/VehicleModelInfo.cpp +++ b/src/modelinfo/VehicleModelInfo.cpp @@ -1223,11 +1223,17 @@ CVehicleModelInfo::LoadVehicleColours(void) &colors[12], &colors[13], &colors[14], &colors[15]); CVehicleModelInfo *mi = (CVehicleModelInfo*)CModelInfo::GetModelInfo(name, nil); - assert(mi); - mi->m_numColours = (n-1)/2; - for(i = 0; i < mi->m_numColours; i++){ - mi->m_colours1[i] = colors[i*2 + 0]; - mi->m_colours2[i] = colors[i*2 + 1]; + //assert(mi); + if(!mi) { + // debug(""); + } + if(mi) + { + mi->m_numColours = (n - 1) / 2; + for(i = 0; i < mi->m_numColours; i++) { + mi->m_colours1[i] = colors[i * 2 + 0]; + mi->m_colours2[i] = colors[i * 2 + 1]; + } } } } diff --git a/src/peds/Ped.h b/src/peds/Ped.h index f415b386..a996e91c 100644 --- a/src/peds/Ped.h +++ b/src/peds/Ped.h @@ -93,6 +93,9 @@ struct FightMove uint8 hitLevel; // FightMoveHitLevel uint8 damage; uint8 flags; +#ifdef MAZAHAKA_ANIM_STUFF + bool loaded_by_fistfite = false; // detect no inited fite (katana anim error) +#endif }; // TODO: This is eFightState on mobile. @@ -110,10 +113,10 @@ enum PedFightMoves FIGHTMOVE_COMBO_B1, FIGHTMOVE_COMBO_B2, FIGHTMOVE_COMBO_B3, - // Melee + /*// Melee // ---------mazahaka ??? kick floor error m_curFightMove < FIGHTMOVE_MELEE1 ? ASSOCGRP_STD CPed::StartFightAttack(uint8 buttonPressure) оно брало не из std бо melee раньше по индексу FIGHTMOVE_MELEE1, FIGHTMOVE_MELEE2, - FIGHTMOVE_MELEE3, + FIGHTMOVE_MELEE3,*/ // Special FIGHTMOVE_GROUNDKICK, // Opponent @@ -123,8 +126,15 @@ enum PedFightMoves FIGHTMOVE_HITLEFT, FIGHTMOVE_HITONFLOOR, FIGHTMOVE_HITBEHIND, + + // Melee // mazahaka moved + FIGHTMOVE_MELEE1, + FIGHTMOVE_MELEE2, + FIGHTMOVE_MELEE3, + FIGHTMOVE_IDLE2NORM, -/* + + /* FIGHTMOVE_KNEE, FIGHTMOVE_PUNCHHOOK, FIGHTMOVE_PUNCHJAB, diff --git a/src/peds/PedFight.cpp b/src/peds/PedFight.cpp index 08e4dc86..29d93c59 100644 --- a/src/peds/PedFight.cpp +++ b/src/peds/PedFight.cpp @@ -29,10 +29,17 @@ uint16 nPlayerInComboMove; RpClump* flyingClumpTemp; +//CPed::LoadFightData(void) init +//PedFightMoves СМОТРИ!!! я сменил блок Melee бо он раньше и ломалась логика выдачи анимки в pedfight FightMove tFightMoves[NUM_FIGHTMOVES] = -{ +{ // MAZAHAKA нелья коменить так как теряются default anim id, нужно прописывать тогда в fistfite (не работает не может найти) + //{ANIM_STD_WALK, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, HITLEVEL_NULL, 0, 0}, + //CPed::LoadFightData(void) + //if (strcmp(animName, "default") != 0) { // if no default + // if comment this, default animid was error no have id + //fistfite.dat (init/load in CPed::LoadFightData(void)) - { ANIM_STD_WALK, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0 }, + /*{ ANIM_STD_WALK, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0 }, { ANIM_STD_WALK, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0 }, { ANIM_STD_WALK, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0 }, { ANIM_STD_WALK, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0 }, @@ -54,9 +61,38 @@ FightMove tFightMoves[NUM_FIGHTMOVES] = { ANIM_STD_WALK, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0 }, { ANIM_STD_WALK, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0 }, { ANIM_STD_WALK, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0 }, - { ANIM_STD_WALK, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0 }, + { ANIM_STD_WALK, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0 },*/ + + + //---test block + { ANIM_STD_NOT_INITED_SLOT_4_FISTFITE, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0 }, + { ANIM_STD_NOT_INITED_SLOT_4_FISTFITE, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0 }, + { ANIM_STD_NOT_INITED_SLOT_4_FISTFITE, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0 }, + { ANIM_STD_NOT_INITED_SLOT_4_FISTFITE, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0 }, + { ANIM_STD_NOT_INITED_SLOT_4_FISTFITE, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0 }, + { ANIM_STD_NOT_INITED_SLOT_4_FISTFITE, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0 }, + { ANIM_STD_NOT_INITED_SLOT_4_FISTFITE, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0 }, + { ANIM_STD_NOT_INITED_SLOT_4_FISTFITE, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0 }, + { ANIM_STD_NOT_INITED_SLOT_4_FISTFITE, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0 }, -/* + //{ ANIM_STD_KICKGROUND, 10.f/30.f, 14.f/30.f, 0.0f, 0.4f, 1.0f, HITLEVEL_GROUND, 1, 0 }, // need? + { ANIM_STD_NOT_INITED_SLOT_4_FISTFITE, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0 }, + + { ANIM_STD_NOT_INITED_SLOT_4_FISTFITE, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0 }, + { ANIM_STD_NOT_INITED_SLOT_4_FISTFITE, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0 }, + { ANIM_STD_NOT_INITED_SLOT_4_FISTFITE, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0 }, + { ANIM_STD_NOT_INITED_SLOT_4_FISTFITE, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0 }, + { ANIM_STD_NOT_INITED_SLOT_4_FISTFITE, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0 }, + { ANIM_STD_NOT_INITED_SLOT_4_FISTFITE, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0 }, + + // default anim name not init/load animId! Hardcode (Katana bug mazahaka fix) + { ANIM_ATTACK_1, 4.f/30.f, 7.f/30.f, 10.f/30.f, 0.4f, 1.0f, HITLEVEL_HIGH, 1, 0 }, // 9 Attack1 H: Animation Name "default" !!! WEAPON_knife_1 + { ANIM_ATTACK_2, 4.f/30.f, 7.f/30.f, 10.f/30.f, 0.4f, 1.0f, HITLEVEL_HIGH, 1, 0 }, // 10 Attack2 H: Animation Name "default" !!! WEAPON_knife_2 + { ANIM_ATTACK_3, 4.f / 30.f, 7.f / 30.f, 10.f / 30.f, 0.4f, 1.0f, HITLEVEL_HIGH, 1, 0 }, // 11 Attack3 H: Animation Name "default" !!! WEAPON_knife_3 + + { ANIM_STD_NOT_INITED_SLOT_4_FISTFITE, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0 }, + + /* { ANIM_STD_NUM, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, HITLEVEL_NULL, 0, 0 }, { ANIM_STD_PUNCH, 0.2f, 8.f/30.f, 0.0f, 0.3f, 1.0f, HITLEVEL_HIGH, 1, 0 }, { ANIM_STD_FIGHT_IDLE, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, HITLEVEL_NULL, 0, 0 }, @@ -1133,6 +1169,7 @@ CPed::StartFightAttack(uint8 buttonPressure) m_fightButtonPressure = 0; if (m_curFightMove > FIGHTMOVE_NULL && m_curFightMove != FIGHTMOVE_IDLE) { + //m_curFightMove 12 kickflor 12<9 false anim animAssoc = CAnimManager::BlendAnimation(GetClump(), m_curFightMove < FIGHTMOVE_MELEE1 ? ASSOCGRP_STD : weaponInfo->m_AnimToPlay, tFightMoves[m_curFightMove].animId, 8.0f); @@ -2403,6 +2440,9 @@ CPed::LoadFightData(void) tFightMoves[moveId].extendReachMultiplier = extendReachMultiplier; tFightMoves[moveId].damage = damage; tFightMoves[moveId].flags = flags; +#ifdef MAZAHAKA_ANIM_STUFF + tFightMoves[moveId].loaded_by_fistfite = true; // detect no inited fite (katana anim error) +#endif switch (hitLevel) { case 'G': @@ -2424,7 +2464,7 @@ CPed::LoadFightData(void) break; } - if (strcmp(animName, "default") != 0) { + if (strcmp(animName, "default") != 0) { // if no default if (strcmp(animName, "null") != 0) { animAssoc = CAnimManager::GetAnimAssociation(ASSOCGRP_STD, animName); tFightMoves[moveId].animId = (AnimationId)animAssoc->animId; @@ -2433,6 +2473,7 @@ CPed::LoadFightData(void) } } moveId++; + debug("moveId %d\n", moveId); } } diff --git a/src/peds/PlayerPed.cpp b/src/peds/PlayerPed.cpp index 4fb0ec29..76000213 100644 --- a/src/peds/PlayerPed.cpp +++ b/src/peds/PlayerPed.cpp @@ -798,12 +798,21 @@ spentAmmoCheck: goto switchDetectDone; } } +#ifdef MAZAHAKA_TRY_FIX_AUTOCHANGE_WEAPON_SLOT_IF_ZERO_AMMO + if(!(GetWeapon()->m_nAmmoTotal == 0 && CPad::GetPad(0)->GetWeapon() /*&& m_nSelectedWepSlot != WEAPONSLOT_UNARMED*/)) { m_nSelectedWepSlot = WEAPONSLOT_UNARMED; } +#else m_nSelectedWepSlot = WEAPONSLOT_UNARMED; +#endif } } switchDetectDone: - if (m_nSelectedWepSlot != m_currentWeapon) { + // mazahaka fix no auto change weapoon + if ((m_nSelectedWepSlot != m_currentWeapon) +#ifdef MAZAHAKA_TRY_FIX_AUTOCHANGE_WEAPON_SLOT_IF_ZERO_AMMO + && !(GetWeapon()->m_nAmmoTotal == 0 && CPad::GetPad(0)->GetWeapon() /*&& m_nSelectedWepSlot != WEAPONSLOT_UNARMED*/) // todo +#endif + ) { if (m_nPedState != PED_ATTACK && m_nPedState != PED_AIM_GUN && m_nPedState != PED_FIGHT) { RemoveWeaponAnims(m_currentWeapon, -1000.0f); MakeChangesForNewWeapon(m_nSelectedWepSlot);