From: <ave...@us...> - 2008-10-13 17:38:22
|
Revision: 5431 http://gemrb.svn.sourceforge.net/gemrb/?rev=5431&view=rev Author: avenger_teambg Date: 2008-10-13 17:38:12 +0000 (Mon, 13 Oct 2008) Log Message: ----------- the core engine will read in the first column of featreq (not the 8.) Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Actor.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Actor.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2008-10-13 17:37:27 UTC (rev 5430) +++ gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2008-10-13 17:38:12 UTC (rev 5431) @@ -1232,7 +1232,7 @@ //we need the MULTIPLE column only //it stores the FEAT_* stat index, and could be taken multiple //times - tmp = core->TranslateStat(tm->QueryField(i,8)); + tmp = core->TranslateStat(tm->QueryField(i,0)); if (tmp>=MAX_STATS) { printMessage("Actor","Invalid stat value in featreq.2da",YELLOW); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fu...@us...> - 2009-02-06 23:02:11
|
Revision: 5661 http://gemrb.svn.sourceforge.net/gemrb/?rev=5661&view=rev Author: fuzzie Date: 2009-02-06 23:02:08 +0000 (Fri, 06 Feb 2009) Log Message: ----------- handle GF_ONE_BYTE_ANIMID in Actor::GetSoundFromINI Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Actor.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Actor.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-02-06 22:45:14 UTC (rev 5660) +++ gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-02-06 23:02:08 UTC (rev 5661) @@ -3432,7 +3432,11 @@ { const char *resource = ""; char section[12]; - snprintf(section,10,"%d", BaseStats[IE_ANIMATION_ID]); + unsigned int animid=BaseStats[IE_ANIMATION_ID]; + if(core->HasFeature(GF_ONE_BYTE_ANIMID)) { + animid&=0xff; + } + snprintf(section,10,"%d", animid); switch(index) { case VB_ATTACK: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lyn...@us...> - 2009-02-20 14:53:58
|
Revision: 5732 http://gemrb.svn.sourceforge.net/gemrb/?rev=5732&view=rev Author: lynxlupodian Date: 2009-02-20 14:53:54 +0000 (Fri, 20 Feb 2009) Log Message: ----------- properly detect iwd2 in CreateDerivedStats - CLASSLEVELSUM is added in pcf_level for all game types Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Actor.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Actor.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-02-20 12:49:29 UTC (rev 5731) +++ gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-02-20 14:53:54 UTC (rev 5732) @@ -4156,7 +4156,7 @@ void Actor::CreateDerivedStats() { - if (BaseStats[IE_CLASSLEVELSUM]) { + if (core->HasFeature(GF_IWD2_SCRIPTNAME)) { CreateDerivedStatsIWD2(); } else { CreateDerivedStatsBG(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2009-03-11 21:44:23
|
Revision: 5785 http://gemrb.svn.sourceforge.net/gemrb/?rev=5785&view=rev Author: avenger_teambg Date: 2009-03-11 21:44:14 +0000 (Wed, 11 Mar 2009) Log Message: ----------- fixed bad subscript in case of not PC classes Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Actor.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Actor.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-03-11 21:34:05 UTC (rev 5784) +++ gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-03-11 21:44:14 UTC (rev 5785) @@ -395,11 +395,11 @@ } anims = new CharAnimations( AnimID&0xffff, BaseStats[IE_ARMOR_TYPE]); if(anims->ResRef[0] == 0) { - delete anims ; - anims = NULL ; - printMessage("Actor", " ",LIGHT_RED); + delete anims ; + anims = NULL ; + printMessage("Actor", " ",LIGHT_RED); printf("Missing animation for %s\n",LongName); - return ; + return ; } anims->SetOffhandRef(ShieldRef); anims->SetHelmetRef(HelmetRef); @@ -409,15 +409,15 @@ assert(anims->palette[PAL_MAIN] == 0); anims->palette[PAL_MAIN] = recover; if (recover) { - anims->lockPalette = true; + anims->lockPalette = true; } //bird animations are not hindered by searchmap //only animtype==7 (bird) uses this feature //this is a hardcoded hack, but works for all engine type if (anims->GetAnimType()!=IE_ANI_BIRD) { - BaseStats[IE_DONOTJUMP]=0; + BaseStats[IE_DONOTJUMP]=0; } else { - BaseStats[IE_DONOTJUMP]=DNJ_BIRD; + BaseStats[IE_DONOTJUMP]=DNJ_BIRD; } SetCircleSize(); anims->SetColors(BaseStats+IE_COLORS); @@ -588,7 +588,8 @@ actor->BaseStats[IE_LEVELRANGER]+ actor->BaseStats[IE_LEVELSORCEROR]; actor->SetBase(IE_CLASSLEVELSUM,sum); - actor->SetupFist(); + //this will be called anyway + //actor->SetupFist(); } void pcf_class (Actor *actor, ieDword /*oldValue*/, ieDword /*newValue*/) @@ -4099,26 +4100,29 @@ int classid = BaseStats[IE_CLASS]; int slot = 0; - for (i=0;i<11;i++) { - //this is not good for multiclassing yet - if ((1<<classid)&isclass[i]) { - BaseStats[levelslots[i]]=levels[slot]; - slot++; + //this works only for PC classes + if (classid<32) { + for (i=0;i<11;i++) { + //this is not good for multiclassing yet + if ((1<<classid)&isclass[i]) { + BaseStats[levelslots[i]]=levels[slot]; + slot++; + } } - } - //recalculate all level based changes - pcf_level(this,0,0); + //recalculate all level based changes + pcf_level(this,0,0); - if (isclass[ISCLERIC]&(1<<classid)) { - turnundeadlevel = BaseStats[IE_LEVELCLERIC]+1-turnlevels[classid]; - if (turnundeadlevel<0) turnundeadlevel=0; + if (isclass[ISCLERIC]&(1<<classid)) { + turnundeadlevel = BaseStats[IE_LEVELCLERIC]+1-turnlevels[classid]; + if (turnundeadlevel<0) turnundeadlevel=0; + } + else if (isclass[ISPALADIN]&(1<<classid)) { + turnundeadlevel = BaseStats[IE_LEVELPALADIN]+1-turnlevels[classid]; + if (turnundeadlevel<0) turnundeadlevel=0; + } else { + turnundeadlevel = 0; + } } - else if (isclass[ISPALADIN]&(1<<classid)) { - turnundeadlevel = BaseStats[IE_LEVELPALADIN]+1-turnlevels[classid]; - if (turnundeadlevel<0) turnundeadlevel=0; - } else { - turnundeadlevel = 0; - } ieDword backstabdamagemultiplier=BaseStats[IE_LEVELTHIEF]; if (backstabdamagemultiplier) { @@ -4158,11 +4162,11 @@ void Actor::CreateDerivedStats() { - if (core->HasFeature(GF_IWD2_SCRIPTNAME)) { - CreateDerivedStatsIWD2(); - } else { - CreateDerivedStatsBG(); - } + if (core->HasFeature(GF_IWD2_SCRIPTNAME)) { + CreateDerivedStatsIWD2(); + } else { + CreateDerivedStatsBG(); + } AutoTable tm("classes"); if (tm) { // currently we need only the MULTI value This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2009-03-29 21:50:37
|
Revision: 5843 http://gemrb.svn.sourceforge.net/gemrb/?rev=5843&view=rev Author: avenger_teambg Date: 2009-03-29 21:50:32 +0000 (Sun, 29 Mar 2009) Log Message: ----------- fixed warning Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Actor.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Actor.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-03-29 21:27:17 UTC (rev 5842) +++ gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-03-29 21:50:32 UTC (rev 5843) @@ -1662,7 +1662,7 @@ if (*value==',') value++; } strncpy(resref, value, 8); - for(count=0;count<8 && resref[count]!=',';count++); + for(count=0;count<8 && resref[count]!=',';count++) {}; resref[count]=0; ieDword len = core->GetAudioDrv()->Play( resref ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2009-03-29 21:51:41
|
Revision: 5844 http://gemrb.svn.sourceforge.net/gemrb/?rev=5844&view=rev Author: avenger_teambg Date: 2009-03-29 21:51:36 +0000 (Sun, 29 Mar 2009) Log Message: ----------- oops, another Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Actor.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Actor.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-03-29 21:50:32 UTC (rev 5843) +++ gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-03-29 21:51:36 UTC (rev 5844) @@ -3464,7 +3464,7 @@ if (*resource==',') resource++; } strncpy(Sound, resource, 8); - for(count=0;count<8 && Sound[count]!=',';count++); + for(count=0;count<8 && Sound[count]!=',';count++) {}; Sound[count]=0; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2009-04-05 10:25:44
|
Revision: 5854 http://gemrb.svn.sourceforge.net/gemrb/?rev=5854&view=rev Author: avenger_teambg Date: 2009-04-05 10:25:29 +0000 (Sun, 05 Apr 2009) Log Message: ----------- fixed a crash with empty quickslots Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Actor.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Actor.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-04-05 10:05:34 UTC (rev 5853) +++ gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-04-05 10:25:29 UTC (rev 5854) @@ -2177,6 +2177,7 @@ if (header<0) { if (!PCStats) return; //not a player character PCStats->GetSlotAndIndex(which,idx,headerindex); +printf("HI: %x\n", headerindex); if (headerindex==0xffff) return; //headerindex is invalid } else { idx=(ieWord) which; @@ -2251,10 +2252,10 @@ //(afaik) // Note: we're now in the QSLOTn case - // If slot is empty, reset quickslot to 0xffff/0 + // If slot is empty, reset quickslot to 0xffff/0xffff if (!inventory.HasItemInSlot("", slot)) { - SetupQuickSlot(which, 0xffff, 0); + SetupQuickSlot(which, 0xffff, 0xffff); } else { ieWord idx; ieWord headerindex; @@ -2274,7 +2275,7 @@ int which = ACT_WEAPON3+i; // Assuming that ACT_WEAPON3 and 4 are always in the first two spots if (PCStats->QSlots[i]!=which) { - SetupQuickSlot(which, 0xffff, 0); + SetupQuickSlot(which, 0xffff, 0xffff); } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2009-04-05 20:30:03
|
Revision: 5860 http://gemrb.svn.sourceforge.net/gemrb/?rev=5860&view=rev Author: avenger_teambg Date: 2009-04-05 20:29:56 +0000 (Sun, 05 Apr 2009) Log Message: ----------- another fix for the invalid item problem (another location) Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Actor.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Actor.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-04-05 20:22:37 UTC (rev 5859) +++ gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-04-05 20:29:56 UTC (rev 5860) @@ -1874,13 +1874,17 @@ { bool effinit=false; if (!GetCurrentArea()) { + //we had no area yet effinit = true; } - Scriptable::SetMap(map); + Scriptable::SetMap(map); //now we have an area localID = LID; globalID = GID; - //this hack is to delay the equipping effects until the actor has + //These functions are called once when the actor is first put in + //the area. It already has all the items (including fist) at this + //time and it is safe to call effects. + //This hack is to delay the equipping effects until the actor has //an area (and the game object is also existing) if (effinit) { int SlotCount = inventory.GetSlotCount(); @@ -1895,8 +1899,13 @@ break; } } + //We need to convert this to signed 16 bits, because + //it is actually a 16 bit number. The high word could + //be anything. It is signed to have the correct math + //when adding it to the base slot (SLOT_WEAPON) in + //case of quivers. (weird IE magic) + inventory.SetEquippedSlot( (ieWordSigned) Equipped ); } - inventory.SetEquippedSlot( Equipped ); } void Actor::SetPosition(Point &position, int jump, int radius) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2009-04-26 15:59:18
|
Revision: 5890 http://gemrb.svn.sourceforge.net/gemrb/?rev=5890&view=rev Author: avenger_teambg Date: 2009-04-26 15:59:08 +0000 (Sun, 26 Apr 2009) Log Message: ----------- fixed wrong memory access in projectile immunity checks Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Actor.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Actor.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-04-26 15:47:22 UTC (rev 5889) +++ gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-04-26 15:59:08 UTC (rev 5890) @@ -274,14 +274,20 @@ fxqueue.SetOwner( this ); inventory.SetOwner( this ); if (classcount<0) { + //This block is executed only once, when the first actor is loaded InitActorTables(); TranslucentShadows = 0; - core->GetDictionary()->Lookup("Translucent Shadows", - TranslucentShadows); + core->GetDictionary()->Lookup("Translucent Shadows", TranslucentShadows); + //get the needed size to store projectile immunity bitflags in Dwords ProjectileSize = (core->GetProjectileServer()->GetHighestProjectileNumber()+31)/32; + //allowing 1024 bits (1024 projectiles ought to be enough for everybody) + //the rest of the projectiles would still work, but couldn't be resisted + if (ProjectileSize>32) { + ProjectileSize=32; + } } - projectileImmunity = (ieDword *) malloc(ProjectileSize); + projectileImmunity = (ieDword *) calloc(ProjectileSize,sizeof(ieDword)); TalkCount = 0; InteractCount = 0; //numtimesinteracted depends on this appearance = 0xffffff; //might be important for created creatures @@ -1447,7 +1453,7 @@ memset(applyWhenHelpless,0,sizeof(ieResRef)); memset(applyWhenAttacked,0,sizeof(ieResRef)); memset(applyWhenBeingHit,0,sizeof(ieResRef)); - memset(projectileImmunity,0,ProjectileSize); + memset(projectileImmunity,0,ProjectileSize*sizeof(ieDword)); //initialize base stats bool first = !(InternalFlags&IF_INITIALIZED); @@ -4102,7 +4108,13 @@ ieDword Actor::ImmuneToProjectile(ieDword projectile) const { - return projectileImmunity[projectile/32]&(1<<(projectile&31)); + int idx; + + idx = projectile/32; + if (idx>ProjectileSize) { + return 0; + } + return projectileImmunity[idx]&(1<<(projectile&31)); } void Actor::AddProjectileImmunity(ieDword projectile) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2009-05-09 14:55:14
|
Revision: 5946 http://gemrb.svn.sourceforge.net/gemrb/?rev=5946&view=rev Author: avenger_teambg Date: 2009-05-09 14:55:09 +0000 (Sat, 09 May 2009) Log Message: ----------- fixed problem with doubled bonus spell slots in equipping effects Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Actor.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Actor.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-05-09 10:50:43 UTC (rev 5945) +++ gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-05-09 14:55:09 UTC (rev 5946) @@ -1498,6 +1498,9 @@ //copy back the original stats, because the effects //will be reapplied in ApplyAllEffects again memcpy( Modified, BaseStats, MAX_STATS * sizeof( ieDword ) ); + //also clear the spell bonuses just given, they will be + //recalculated below again + spellbook.ClearBonus(); } fxqueue.ApplyAllEffects( this ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2009-05-10 21:22:13
|
Revision: 5951 http://gemrb.svn.sourceforge.net/gemrb/?rev=5951&view=rev Author: avenger_teambg Date: 2009-05-10 21:22:04 +0000 (Sun, 10 May 2009) Log Message: ----------- put the copied actor on the map Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Actor.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Actor.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-05-10 21:13:45 UTC (rev 5950) +++ gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-05-10 21:22:04 UTC (rev 5951) @@ -4282,7 +4282,13 @@ //copy the running effects EffectQueue *newFXQueue = fxqueue.CopySelf(); + area->AddActor(newActor); + newActor->Pos.x = Pos.x; + newActor->Pos.y = Pos.y; + newActor->Destination.x = Destination.x; + newActor->Destination.y = Destination.y; + newActor->SetOrientation(GetOrientation(),0); //and apply them - newActor->RefreshEffects(newFXQueue); + newActor->RefreshEffects(newFXQueue); return newActor; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lyn...@us...> - 2009-05-14 17:49:39
|
Revision: 5964 http://gemrb.svn.sourceforge.net/gemrb/?rev=5964&view=rev Author: lynxlupodian Date: 2009-05-14 17:49:07 +0000 (Thu, 14 May 2009) Log Message: ----------- Actor::LearnSpell: implemented the LS_STATS check Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Actor.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Actor.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-05-14 17:36:25 UTC (rev 5963) +++ gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-05-14 17:49:07 UTC (rev 5964) @@ -2518,6 +2518,14 @@ if (!spell) { return LSR_INVALID; //not existent spell } + + if (flags & LS_STATS) { + // chance to learn roll + if (core->Roll(1,100,0) > core->GetIntelligenceBonus(0, GetStat(IE_INT))) { + return LSR_FAILED; + } + } + int explev = spellbook.LearnSpell(spell, flags&LS_MEMO); int tmp = spell->SpellNameIdentified; if (flags&LS_LEARN) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lyn...@us...> - 2009-05-21 21:01:42
|
Revision: 6033 http://gemrb.svn.sourceforge.net/gemrb/?rev=6033&view=rev Author: lynxlupodian Date: 2009-05-21 21:01:12 +0000 (Thu, 21 May 2009) Log Message: ----------- added hitpoints to the debug dump Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Actor.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Actor.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-05-21 20:38:24 UTC (rev 6032) +++ gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-05-21 21:01:12 UTC (rev 6033) @@ -1878,6 +1878,7 @@ printf( "Morale: %d current morale:%d\n", BaseStats[IE_MORALE], Modified[IE_MORALE] ); printf( "Moralebreak:%d Morale recovery:%d\n", Modified[IE_MORALEBREAK], Modified[IE_MORALERECOVERYTIME] ); printf( "Visualrange:%d (Explorer: %d)\n", Modified[IE_VISUALRANGE], Modified[IE_EXPLORE] ); + printf( "HP: %d current HP:%d\n", BaseStats[IE_HITPOINTS], Modified[IE_HITPOINTS] ); printf( "Mod[IE_ANIMATION_ID]: 0x%04X\n", Modified[IE_ANIMATION_ID] ); printf( "Colors: "); if (core->HasFeature(GF_ONE_BYTE_ANIMID) ) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lyn...@us...> - 2009-05-21 21:56:02
|
Revision: 6034 http://gemrb.svn.sourceforge.net/gemrb/?rev=6034&view=rev Author: lynxlupodian Date: 2009-05-21 21:55:31 +0000 (Thu, 21 May 2009) Log Message: ----------- Actor.cpp: fixed xp granting feedback Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Actor.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Actor.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-05-21 21:01:12 UTC (rev 6033) +++ gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-05-21 21:55:31 UTC (rev 6034) @@ -3028,7 +3028,6 @@ void Actor::AddExperience(int exp) { SetBase(IE_XP,BaseStats[IE_XP]+exp); - core->DisplayConstantStringValue(STR_GOTXP, 0xbcefbc, (ieDword) exp); } void Actor::AddExperience(int type, int level) @@ -3041,7 +3040,9 @@ if (l>=(unsigned int) xpbonuslevels) { l=xpbonuslevels-1; } - AddExperience(xpbonus[type*xpbonuslevels+l]); + int xp = xpbonus[type*xpbonuslevels+l]; + AddExperience(xp); + core->DisplayConstantStringValue(STR_GOTXP, 0xbcefbc, (ieDword) xp); } bool Actor::Schedule(ieDword gametime) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fu...@us...> - 2009-05-21 23:06:04
|
Revision: 6035 http://gemrb.svn.sourceforge.net/gemrb/?rev=6035&view=rev Author: fuzzie Date: 2009-05-21 23:05:51 +0000 (Thu, 21 May 2009) Log Message: ----------- change NewBase to use SetBase again, otherwise SetBaseNoPCF doesn't call the pcf so nothing dies.. probably the wrong fix, though Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Actor.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Actor.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-05-21 21:55:31 UTC (rev 6034) +++ gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-05-21 23:05:51 UTC (rev 6035) @@ -1610,15 +1610,15 @@ switch (ModifierType) { case MOD_ADDITIVE: //flat point modifier - SetBaseNoPCF(StatIndex, BaseStats[StatIndex]+ModifierValue); + SetBase(StatIndex, BaseStats[StatIndex]+ModifierValue); break; case MOD_ABSOLUTE: //straight stat change - SetBaseNoPCF(StatIndex, ModifierValue); + SetBase(StatIndex, ModifierValue); break; case MOD_PERCENT: //percentile - SetBaseNoPCF(StatIndex, BaseStats[StatIndex] * ModifierValue / 100); + SetBase(StatIndex, BaseStats[StatIndex] * ModifierValue / 100); break; } return BaseStats[StatIndex] - oldmod; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2009-05-22 23:17:16
|
Revision: 6055 http://gemrb.svn.sourceforge.net/gemrb/?rev=6055&view=rev Author: avenger_teambg Date: 2009-05-22 23:17:08 +0000 (Fri, 22 May 2009) Log Message: ----------- maximum value for proficiencies (dual class uses higher bits) Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Actor.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Actor.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-05-22 23:02:14 UTC (rev 6054) +++ gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-05-22 23:17:08 UTC (rev 6055) @@ -889,10 +889,10 @@ 200,200,MAX_LEVEL,255,25,100,25,25,25,25,25,999999999,999999999,999999999,25,25,//2f 200,255,200,100,100,200,200,25,5,100,1,1,100,1,1,1,//3f 1,1,1,1,MAX_LEVEL,MAX_LEVEL,1,9999,25,100,100,255,1,20,20,25,//4f -25,1,1,255,25,25,255,255,25,5,5,5,5,5,5,5,//5f -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,//6f -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,//7f -5,5,5,5,5,5,5,100,100,100,255,5,5,255,1,1,//8f +25,1,1,255,25,25,255,255,25,255,255,255,255,255,255,255,//5f +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,//6f +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,//7f +255,255,255,255,255,255,255,100,100,100,255,5,5,255,1,1,//8f 1,25,25,30,1,1,1,25,-1,100,100,1,255,255,255,255,//9f 255,255,255,255,255,255,20,255,255,1,20,255,999999999,999999999,1,1,//af 999999999,999999999,0,0,10,0,0,0,0,0,0,0,0,0,0,0,//bf This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2009-05-22 23:19:49
|
Revision: 6056 http://gemrb.svn.sourceforge.net/gemrb/?rev=6056&view=rev Author: avenger_teambg Date: 2009-05-22 23:19:41 +0000 (Fri, 22 May 2009) Log Message: ----------- fixed an ugly typo Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Actor.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Actor.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-05-22 23:17:08 UTC (rev 6055) +++ gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-05-22 23:19:41 UTC (rev 6056) @@ -4127,7 +4127,7 @@ } if (item->MinStrength==18) { - if (GetStat(IE_STR==18)) { + if (GetStat(IE_STR)==18) { if (item->MinStrengthBonus>GetStat(IE_STREXTRA)) { return 1; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ze...@us...> - 2009-05-24 16:50:25
|
Revision: 6092 http://gemrb.svn.sourceforge.net/gemrb/?rev=6092&view=rev Author: zefklop Date: 2009-05-24 16:50:16 +0000 (Sun, 24 May 2009) Log Message: ----------- Use correct animations with slings and crossbows. Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Actor.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Actor.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-05-24 16:02:20 UTC (rev 6091) +++ gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-05-24 16:50:16 UTC (rev 6092) @@ -3999,6 +3999,9 @@ GetWeapon(header, NULL) ; if(header && header->AttackType == ITEM_AT_BOW) { AttackStance = IE_ANI_SHOOT ; + ITMExtHeader* projHeader ; + GetRangedWeapon(projHeader, NULL) ; + anims->RangedType = projHeader->ProjectileType - 1 ; return ; } AttackStance = IE_ANI_ATTACK; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ze...@us...> - 2009-05-30 14:06:19
|
Revision: 6190 http://gemrb.svn.sourceforge.net/gemrb/?rev=6190&view=rev Author: zefklop Date: 2009-05-30 14:02:38 +0000 (Sat, 30 May 2009) Log Message: ----------- Fix build. Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Actor.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Actor.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-05-30 13:31:08 UTC (rev 6189) +++ gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-05-30 14:02:38 UTC (rev 6190) @@ -2855,7 +2855,7 @@ //critical failure DisplayStringCore(this, VB_CRITMISS, DS_CONSOLE|DS_CONST ); if (Flags&WEAPON_RANGED) { - UseItem(wi.slot, -2, target, UI_MISS); + UseItem(wi.slot, (ieDword)-2, target, UI_MISS); } else { //break sword if (header->RechargeFlags&IE_ITEM_BREAKABLE) { @@ -2894,7 +2894,7 @@ if (tohit<defense) { //hit failed if (Flags&WEAPON_RANGED) { - UseItem(wi.slot, -2, target, UI_MISS); + UseItem(wi.slot, (ieDword)-2, target, UI_MISS); } return; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fu...@us...> - 2009-05-30 14:22:21
|
Revision: 6189 http://gemrb.svn.sourceforge.net/gemrb/?rev=6189&view=rev Author: fuzzie Date: 2009-05-30 13:31:08 +0000 (Sat, 30 May 2009) Log Message: ----------- better usability checks Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Actor.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Actor.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-05-30 05:03:46 UTC (rev 6188) +++ gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-05-30 13:31:08 UTC (rev 6189) @@ -521,9 +521,9 @@ } } -#define BG2_KITMASK 0xc000ffff -#define KIT_BARBARIAN 0x40000000 -#define KIT_BASECLASS 0x4000 +#define BG2_KITMASK 0xffffc000 +#define KIT_BARBARIAN 0x4000 +#define KIT_BASECLASS 0x40000000 //applies a kit on the character (only bg2) bool Actor::ApplyKit(ieDword Value) @@ -544,7 +544,7 @@ } //if it wasn't found, try the bg2 kit format if ((Value&BG2_KITMASK)==KIT_BARBARIAN) { - row = (Value>>16)&0xfff; + row = (Value<<16); } //cannot find kit if (table->GetRowCount()>=row) { @@ -4129,7 +4129,7 @@ //feel free to solve this logic without a goto if (itemuse[i].stat==IE_KIT) { if ((stat&BG2_KITMASK)==KIT_BARBARIAN) { - stat = (stat>>16)&0xfff; + stat = (stat<<16); // correct? kit values are confusing if (stat) { goto resolve_stat; } else { @@ -4141,6 +4141,7 @@ stat = ResolveTableValue(itemuse[i].table, stat, mcol, itemuse[i].vcol); } if (stat&itemvalue) { + //printf("failed usability: itemvalue %d, stat %d, stat value %d\n", itemvalue, itemuse[i].stat, stat); return STR_CANNOT_USE_ITEM; } } @@ -4152,43 +4153,47 @@ int Actor::Unusable(Item *item) const { if (!GetStat(IE_CANUSEANYITEM)) { - return CheckUsability(item); + int unusable = CheckUsability(item); + if (unusable) { + return unusable; + } } + // iesdp says this is always checked? + if (item->MinLevel>GetXPLevel(true)) { + return STR_CANNOT_USE_ITEM; + } + if (!CheckAbilities) { return 0; } - if (item->MinLevel>GetXPLevel(true)) { - return 1; - } - if (item->MinStrength>GetStat(IE_STR)) { - return 1; + return STR_CANNOT_USE_ITEM; } if (item->MinStrength==18) { if (GetStat(IE_STR)==18) { if (item->MinStrengthBonus>GetStat(IE_STREXTRA)) { - return 1; + return STR_CANNOT_USE_ITEM; } } } if (item->MinIntelligence>GetStat(IE_INT)) { - return 1; + return STR_CANNOT_USE_ITEM; } if (item->MinDexterity>GetStat(IE_DEX)) { - return 1; + return STR_CANNOT_USE_ITEM; } if (item->MinWisdom>GetStat(IE_WIS)) { - return 1; + return STR_CANNOT_USE_ITEM; } if (item->MinConstitution>GetStat(IE_CON)) { - return 1; + return STR_CANNOT_USE_ITEM; } if (item->MinCharisma>GetStat(IE_CHR)) { - return 1; + return STR_CANNOT_USE_ITEM; } //note, weapon proficiencies shouldn't be checked here //missing proficiency causes only attack penalty This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fu...@us...> - 2009-05-30 21:40:57
|
Revision: 6199 http://gemrb.svn.sourceforge.net/gemrb/?rev=6199&view=rev Author: fuzzie Date: 2009-05-30 21:40:45 +0000 (Sat, 30 May 2009) Log Message: ----------- never destroy in-party actors Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Actor.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Actor.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-05-30 21:28:07 UTC (rev 6198) +++ gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-05-30 21:40:45 UTC (rev 6199) @@ -2205,6 +2205,10 @@ //remove all effects that are not 'permanent after death' here //permanent after death type is 9 SetBaseBit(IE_STATE_ID, STATE_DEAD, true); + + // party actors are never removed + if (InParty) return false; + if (Modified[IE_MC_FLAGS]&MC_REMOVE_CORPSE) return true; if (Modified[IE_MC_FLAGS]&MC_KEEP_CORPSE) return false; //if chunked death, then return true This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2009-05-31 16:54:20
|
Revision: 6213 http://gemrb.svn.sourceforge.net/gemrb/?rev=6213&view=rev Author: avenger_teambg Date: 2009-05-31 16:54:19 +0000 (Sun, 31 May 2009) Log Message: ----------- call SetupFist() Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Actor.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Actor.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-05-31 16:01:29 UTC (rev 6212) +++ gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-05-31 16:54:19 UTC (rev 6213) @@ -4520,6 +4520,9 @@ //the creature importer does this too memcpy(newActor->Modified,newActor->BaseStats, sizeof(Modified) ); + //this is called too + newActor->SetupFist(); + //copy the running effects EffectQueue *newFXQueue = fxqueue.CopySelf(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2009-05-31 17:08:11
|
Revision: 6214 http://gemrb.svn.sourceforge.net/gemrb/?rev=6214&view=rev Author: avenger_teambg Date: 2009-05-31 17:07:58 +0000 (Sun, 31 May 2009) Log Message: ----------- more CopySelf hacking Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Actor.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Actor.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-05-31 16:54:19 UTC (rev 6213) +++ gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-05-31 17:07:58 UTC (rev 6214) @@ -4520,7 +4520,8 @@ //the creature importer does this too memcpy(newActor->Modified,newActor->BaseStats, sizeof(Modified) ); - //this is called too + //these need to be called too to have a valid inventory + newActor->inventory.SetSlotCount(inventory.GetSlotCount()); newActor->SetupFist(); //copy the running effects This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lyn...@us...> - 2009-05-31 18:23:38
|
Revision: 6217 http://gemrb.svn.sourceforge.net/gemrb/?rev=6217&view=rev Author: lynxlupodian Date: 2009-05-31 18:22:00 +0000 (Sun, 31 May 2009) Log Message: ----------- reset the animation in CopySelf Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Actor.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Actor.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-05-31 18:09:11 UTC (rev 6216) +++ gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-05-31 18:22:00 UTC (rev 6217) @@ -4530,6 +4530,7 @@ area->AddActor(newActor); newActor->SetPosition( Pos, CC_CHECK_IMPASSABLE, 0 ); newActor->SetOrientation(GetOrientation(),0); + newActor->SetStance( IE_ANI_READY ); //and apply them newActor->RefreshEffects(newFXQueue); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ze...@us...> - 2009-05-31 19:26:08
|
Revision: 6218 http://gemrb.svn.sourceforge.net/gemrb/?rev=6218&view=rev Author: zefklop Date: 2009-05-31 19:26:00 +0000 (Sun, 31 May 2009) Log Message: ----------- Use proper attack stance with throwing weapons. Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Actor.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Actor.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-05-31 18:22:00 UTC (rev 6217) +++ gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-05-31 19:26:00 UTC (rev 6218) @@ -4137,12 +4137,16 @@ WeaponInfo wi; ITMExtHeader *header = GetWeapon(wi); - if(header && header->AttackType == ITEM_AT_BOW) { + if(header && (header->AttackType == ITEM_AT_BOW)) { AttackStance = IE_ANI_SHOOT; ITMExtHeader* projHeader = GetRangedWeapon(wi); anims->RangedType = projHeader->ProjectileType - 1; return; } + if(header && (header->AttackType == ITEM_AT_PROJECTILE)) { + AttackStance = IE_ANI_ATTACK_SLASH ; //That's it!! + return ; + } AttackStance = IE_ANI_ATTACK; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |