mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-05-06 19:01:21 +03:00
Merge branch 'master' into savedgame
Conflicts: apps/openmw/mwmechanics/actors.cpp apps/openmw/mwworld/worldimp.cpp files/settings-default.cfg
This commit is contained in:
commit
030c733e2d
172 changed files with 4247 additions and 1455 deletions
|
@ -160,10 +160,10 @@ void Land::loadData(int flags)
|
|||
}
|
||||
mEsm->restoreContext(mContext);
|
||||
|
||||
memset(mLandData->mNormals, 0, LAND_NUM_VERTS * 3);
|
||||
memset(mLandData->mNormals, 0, sizeof(mLandData->mNormals));
|
||||
|
||||
if (mEsm->isNextSub("VNML")) {
|
||||
condLoad(actual, DATA_VNML, mLandData->mNormals, sizeof(VNML));
|
||||
condLoad(actual, DATA_VNML, mLandData->mNormals, sizeof(mLandData->mNormals));
|
||||
}
|
||||
|
||||
if (mEsm->isNextSub("VHGT")) {
|
||||
|
|
|
@ -72,13 +72,13 @@ struct Land
|
|||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
typedef signed char VNML[LAND_NUM_VERTS * 3];
|
||||
typedef signed char VNML;
|
||||
|
||||
struct LandData
|
||||
{
|
||||
float mHeightOffset;
|
||||
float mHeights[LAND_NUM_VERTS];
|
||||
VNML mNormals;
|
||||
VNML mNormals[LAND_NUM_VERTS * 3];
|
||||
uint16_t mTextures[LAND_NUM_TEXTURES];
|
||||
|
||||
bool mUsingColours;
|
||||
|
|
|
@ -81,6 +81,98 @@ void MagicEffect::save(ESMWriter &esm) const
|
|||
esm.writeHNOString("DESC", mDescription);
|
||||
}
|
||||
|
||||
short MagicEffect::getResistanceEffect(short effect)
|
||||
{
|
||||
// Source https://wiki.openmw.org/index.php?title=Research:Magic#Effect_attribute
|
||||
|
||||
// <Effect, Effect providing resistance against first effect>
|
||||
std::map<short, short> effects;
|
||||
effects[DisintegrateArmor] = Sanctuary;
|
||||
effects[DisintegrateWeapon] = Sanctuary;
|
||||
|
||||
for (int i=0; i<5; ++i)
|
||||
effects[DrainAttribute+i] = ResistMagicka;
|
||||
for (int i=0; i<5; ++i)
|
||||
effects[DamageAttribute+i] = ResistMagicka;
|
||||
for (int i=0; i<5; ++i)
|
||||
effects[AbsorbAttribute+i] = ResistMagicka;
|
||||
for (int i=0; i<10; ++i)
|
||||
effects[WeaknessToFire+i] = ResistMagicka;
|
||||
|
||||
effects[Burden] = ResistMagicka;
|
||||
effects[Charm] = ResistMagicka;
|
||||
effects[Silence] = ResistMagicka;
|
||||
effects[Blind] = ResistMagicka;
|
||||
effects[Sound] = ResistMagicka;
|
||||
|
||||
for (int i=0; i<2; ++i)
|
||||
{
|
||||
effects[CalmHumanoid] = ResistMagicka;
|
||||
effects[FrenzyHumanoid] = ResistMagicka;
|
||||
effects[DemoralizeHumanoid] = ResistMagicka;
|
||||
effects[RallyHumanoid] = ResistMagicka;
|
||||
}
|
||||
|
||||
effects[TurnUndead] = ResistMagicka;
|
||||
|
||||
effects[FireDamage] = ResistFire;
|
||||
effects[FrostDamage] = ResistFrost;
|
||||
effects[ShockDamage] = ResistShock;
|
||||
effects[Vampirism] = ResistCommonDisease;
|
||||
effects[Corprus] = ResistCorprusDisease;
|
||||
effects[Poison] = ResistPoison;
|
||||
effects[Paralyze] = ResistParalysis;
|
||||
|
||||
if (effects.find(effect) != effects.end())
|
||||
return effects[effect];
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
short MagicEffect::getWeaknessEffect(short effect)
|
||||
{
|
||||
std::map<short, short> effects;
|
||||
|
||||
for (int i=0; i<5; ++i)
|
||||
effects[DrainAttribute+i] = WeaknessToMagicka;
|
||||
for (int i=0; i<5; ++i)
|
||||
effects[DamageAttribute+i] = WeaknessToMagicka;
|
||||
for (int i=0; i<5; ++i)
|
||||
effects[AbsorbAttribute+i] = WeaknessToMagicka;
|
||||
for (int i=0; i<10; ++i)
|
||||
effects[WeaknessToFire+i] = WeaknessToMagicka;
|
||||
|
||||
effects[Burden] = WeaknessToMagicka;
|
||||
effects[Charm] = WeaknessToMagicka;
|
||||
effects[Silence] = WeaknessToMagicka;
|
||||
effects[Blind] = WeaknessToMagicka;
|
||||
effects[Sound] = WeaknessToMagicka;
|
||||
|
||||
for (int i=0; i<2; ++i)
|
||||
{
|
||||
effects[CalmHumanoid] = WeaknessToMagicka;
|
||||
effects[FrenzyHumanoid] = WeaknessToMagicka;
|
||||
effects[DemoralizeHumanoid] = WeaknessToMagicka;
|
||||
effects[RallyHumanoid] = WeaknessToMagicka;
|
||||
}
|
||||
|
||||
effects[TurnUndead] = WeaknessToMagicka;
|
||||
|
||||
effects[FireDamage] = WeaknessToFire;
|
||||
effects[FrostDamage] = WeaknessToFrost;
|
||||
effects[ShockDamage] = WeaknessToShock;
|
||||
effects[Vampirism] = WeaknessToCommonDisease;
|
||||
effects[Corprus] = WeaknessToCorprusDisease;
|
||||
effects[Poison] = WeaknessToPoison;
|
||||
|
||||
// Weakness to magicka or -1 ?
|
||||
effects[Paralyze] = WeaknessToMagicka;
|
||||
|
||||
if (effects.find(effect) != effects.end())
|
||||
return effects[effect];
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
static std::map<short,std::string> genNameMap()
|
||||
{
|
||||
|
|
|
@ -49,8 +49,9 @@ struct MagicEffect
|
|||
int mSchool; // SpellSchool, see defs.hpp
|
||||
float mBaseCost;
|
||||
int mFlags;
|
||||
// Properties of the fired magic 'ball' I think
|
||||
int mRed, mBlue, mGreen;
|
||||
// Glow color for enchanted items with this effect
|
||||
int mRed, mGreen, mBlue;
|
||||
// Properties of the fired magic 'ball'
|
||||
float mSpeed, mSize, mSizeCap;
|
||||
}; // 36 bytes
|
||||
|
||||
|
@ -58,6 +59,12 @@ struct MagicEffect
|
|||
|
||||
static const std::string &effectIdToString(short effectID);
|
||||
static short effectStringToId(const std::string &effect);
|
||||
|
||||
/// Returns the effect that provides resistance against \a effect (or -1 if there's none)
|
||||
static short getResistanceEffect(short effect);
|
||||
/// Returns the effect that induces weakness against \a effect (or -1 if there's none)
|
||||
static short getWeaknessEffect(short effect);
|
||||
|
||||
MagnitudeDisplayType getMagnitudeDisplayType() const;
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue