bool DOORRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize) { switch(FieldID) { case 1: //flags1 SetHeaderFlagMask(*(UINT32 *)FieldValue); break; case 3: //flags2 SetHeaderUnknownFlagMask(*(UINT32 *)FieldValue); break; case 4: //eid EDID.Copy((STRING)FieldValue); break; case 5: //full FULL.Copy((STRING)FieldValue); break; case 6: //modPath MODL.Load(); MODL->MODL.Copy((STRING)FieldValue); break; case 7: //modb MODL.Load(); MODL->MODB.value = *(FLOAT32 *)FieldValue; break; case 8: //modt_p MODL.Load(); MODL->MODT.Copy((UINT8ARRAY)FieldValue, ArraySize); break; case 9: //script SCRI.value = *(FORMID *)FieldValue; return true; case 10: //soundOpen SNAM.value = *(FORMID *)FieldValue; return true; case 11: //soundClose ANAM.value = *(FORMID *)FieldValue; return true; case 12: //soundLoop BNAM.value = *(FORMID *)FieldValue; return true; case 13: //flags SetFlagMask(*(UINT8 *)FieldValue); break; case 14: //destinations TNAM.resize(ArraySize); for(UINT32 x = 0; x < ArraySize; ++x) TNAM.value[x] = ((FORMIDARRAY)FieldValue)[x]; return true; default: break; } return false; }
bool EYESRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, uint32_t ArraySize) { switch(FieldID) { case 1: //flags1 SetHeaderFlagMask(*(uint32_t *)FieldValue); break; case 3: //versionControl1 if(ArraySize != 4) break; ((UINT8ARRAY)&flagsUnk)[0] = ((UINT8ARRAY)FieldValue)[0]; ((UINT8ARRAY)&flagsUnk)[1] = ((UINT8ARRAY)FieldValue)[1]; ((UINT8ARRAY)&flagsUnk)[2] = ((UINT8ARRAY)FieldValue)[2]; ((UINT8ARRAY)&flagsUnk)[3] = ((UINT8ARRAY)FieldValue)[3]; break; case 4: //eid EDID.Copy((char *)FieldValue); break; case 5: //formVersion formVersion = *(uint16_t *)FieldValue; break; case 6: //versionControl2 if(ArraySize != 2) break; versionControl2[0] = ((UINT8ARRAY)FieldValue)[0]; versionControl2[1] = ((UINT8ARRAY)FieldValue)[1]; break; case 7: //full FULL.Copy((char *)FieldValue); break; case 8: //iconPath ICON.Copy((char *)FieldValue); break; case 9: //flags SetFlagMask(*(uint8_t *)FieldValue); break; default: break; } return false; }
bool FURNRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize) { switch(FieldID) { case 1: //flags1 SetHeaderFlagMask(*(UINT32 *)FieldValue); break; case 3: //flags2 SetHeaderUnknownFlagMask(*(UINT32 *)FieldValue); break; case 4: //eid EDID.Copy((STRING)FieldValue); break; case 5: //full FULL.Copy((STRING)FieldValue); break; case 6: //modPath MODL.Load(); MODL->MODL.Copy((STRING)FieldValue); break; case 7: //modb MODL.Load(); MODL->MODB.value = *(FLOAT32 *)FieldValue; break; case 8: //modt_p MODL.Load(); MODL->MODT.Copy((UINT8ARRAY)FieldValue, ArraySize); break; case 9: //script SCRI.value = *(FORMID *)FieldValue; return true; case 10: //flags SetFlagMask(*(UINT32 *)FieldValue); break; default: break; } return false; }
bool ALCHRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, uint32_t ArraySize) { switch(FieldID) { case 1: //flags1 SetHeaderFlagMask(*(uint32_t *)FieldValue); break; case 3: //versionControl1 if(ArraySize != 4) break; ((UINT8ARRAY)&flagsUnk)[0] = ((UINT8ARRAY)FieldValue)[0]; ((UINT8ARRAY)&flagsUnk)[1] = ((UINT8ARRAY)FieldValue)[1]; ((UINT8ARRAY)&flagsUnk)[2] = ((UINT8ARRAY)FieldValue)[2]; ((UINT8ARRAY)&flagsUnk)[3] = ((UINT8ARRAY)FieldValue)[3]; break; case 4: //eid EDID.Copy((char *)FieldValue); break; case 5: //formVersion formVersion = *(uint16_t *)FieldValue; break; case 6: //versionControl2 if(ArraySize != 2) break; versionControl2[0] = ((UINT8ARRAY)FieldValue)[0]; versionControl2[1] = ((UINT8ARRAY)FieldValue)[1]; break; case 7: //boundX1 OBND->x1 = *(int16_t *)FieldValue; break; case 8: //boundY1 OBND->y1 = *(int16_t *)FieldValue; break; case 9: //boundZ1 OBND->z1 = *(int16_t *)FieldValue; break; case 10: //boundX2 OBND->x2 = *(int16_t *)FieldValue; break; case 11: //boundY2 OBND->y2 = *(int16_t *)FieldValue; break; case 12: //boundZ2 OBND->z2 = *(int16_t *)FieldValue; break; case 13: //full FULL.Copy((char *)FieldValue); break; case 14: //keywords KWDA.resize(ArraySize); for (uint32_t i = 0; i < ArraySize; ++i) KWDA.value[i] = ((FORMIDARRAY)FieldValue)[i]; return true; case 15: //description DESC.Copy((char *)FieldValue); break; case 16: //modPath MODL.Load(); MODL->MODL.Copy((char *)FieldValue); break; case 17: //modt_p MODL.Load(); MODL->MODT.Copy((UINT8ARRAY)FieldValue, ArraySize); break; case 18: //altTextures MODL.Load(); if (ListFieldID == 0) // altTextures { MODL->Textures.resize(ArraySize); return false; } if (ListIndex >= MODL->Textures.MODS.size()) break; switch (ListFieldID) { case 1: //name delete[]MODL->Textures.MODS[ListIndex]->name; MODL->Textures.MODS[ListIndex]->name = NULL; if (FieldValue != NULL) { ArraySize = (uint32_t)strlen((char *)FieldValue) + 1; MODL->Textures.MODS[ListIndex]->name = new char[ArraySize]; strcpy_s(MODL->Textures.MODS[ListIndex]->name, ArraySize, (char *)FieldValue); } break; case 2: //texture MODL->Textures.MODS[ListIndex]->texture = *(FORMID *)FieldValue; return true; case 3: //index MODL->Textures.MODS[ListIndex]->index = *(int32_t *)FieldValue; break; default: break; } break; case 19: //destructableHealth Destructable.Load(); Destructable->DEST->health = *(int32_t *)FieldValue; break; case 20: //destructableCount Destructable.Load(); Destructable->DEST->count = *(uint8_t *)FieldValue; break; case 21: //destructableFlags Destructable.Load(); Destructable->DEST->flags = *(uint8_t *)FieldValue; break; case 22: //destructableUnused1 if (ArraySize != 2) break; Destructable.Load(); Destructable->DEST->unused1[0] = ((UINT8ARRAY)FieldValue)[0]; Destructable->DEST->unused1[1] = ((UINT8ARRAY)FieldValue)[1]; break; case 23: //destructableStages Destructable.Load(); if (ListFieldID == 0) //destructableStagesSize { Destructable->Stages.resize(ArraySize); return false; } if (ListIndex >= Destructable->Stages.value.size()) break; switch (ListFieldID) { case 1: //health Destructable->Stages.value[ListIndex]->DSTD->health = *(uint8_t *)FieldValue; break; case 2: //index Destructable->Stages.value[ListIndex]->DSTD->index = *(uint8_t *)FieldValue; break; case 3: //stage Destructable->Stages.value[ListIndex]->DSTD->stage = *(uint8_t *)FieldValue; break; case 4: //flags Destructable->Stages.value[ListIndex]->DSTD->flags = *(uint8_t *)FieldValue; break; case 5: //dps Destructable->Stages.value[ListIndex]->DSTD->dps = *(int32_t *)FieldValue; break; case 6: //explosion Destructable->Stages.value[ListIndex]->DSTD->explosion = *(FORMID *)FieldValue; return true; case 7: //debris Destructable->Stages.value[ListIndex]->DSTD->debris = *(FORMID *)FieldValue; return true; case 8: //debrisCount Destructable->Stages.value[ListIndex]->DSTD->debrisCount = *(int32_t *)FieldValue; break; case 9: //modPath Destructable->Stages.value[ListIndex]->DMDL.Copy((char *)FieldValue); break; case 10: //modt_p Destructable->Stages.value[ListIndex]->DMDT.Copy((UINT8ARRAY)FieldValue, ArraySize); break; case 11: //altTextures if (ListX2FieldID == 0) //altTexturesSize { Destructable->Stages.value[ListIndex]->DMDS.resize(ArraySize); return false; } if (ListX2Index >= Destructable->Stages.value[ListIndex]->DMDS.MODS.size()) break; switch (ListX2FieldID) { case 1: //name delete[] Destructable->Stages.value[ListIndex]->DMDS.MODS[ListX2Index]->name; Destructable->Stages.value[ListIndex]->DMDS.MODS[ListX2Index]->name = NULL; if (FieldValue != NULL) { ArraySize = (uint32_t)strlen((char *)FieldValue) + 1; Destructable->Stages.value[ListIndex]->DMDS.MODS[ListX2Index]->name = new char[ArraySize]; strcpy_s(Destructable->Stages.value[ListIndex]->DMDS.MODS[ListX2Index]->name, ArraySize, (char *)FieldValue); } break; case 2: //texture Destructable->Stages.value[ListIndex]->DMDS.MODS[ListX2Index]->texture = *(FORMID *)FieldValue; return true; case 3: //index Destructable->Stages.value[ListIndex]->DMDS.MODS[ListX2Index]->index = *(int32_t *)FieldValue; break; default: break; } break; default: break; } break; case 24: //iconPath ICON.Copy((char *)FieldValue); break; case 25: //smallIconPath MICO.Copy((char *)FieldValue); break; case 26: //pickupSound YNAM.value = *(FORMID *)FieldValue; return true; case 27: //drop Sound ZNAM.value = *(FORMID *)FieldValue; return true; case 28: //equipmentType ETYP.value = *(FORMID *)FieldValue; return true; case 29: //wieght DATA.value = *(float *)FieldValue; break; case 30: //value ENIT->value = *(int32_t *)FieldValue; break; case 31: //flags SetFlagMask(*(uint8_t *)FieldValue); break; case 32: //withdrawalEffect ENIT->withdrawalEffect = *(FORMID *)FieldValue; return true; case 33: //addictionChance ENIT->addictionChance = *(float *)FieldValue; break; case 34: //consumeSound ENIT->consumeSound = *(FORMID *)FieldValue; return true; case 35: //effects if (ListFieldID == 0) //effectsSize { Effects.resize(ArraySize); return false; } if (ListIndex >= Effects.value.size()) break; switch (ListFieldID) { case 1: //effect Effects.value[ListIndex]->EFID.value = *(FORMID *)FieldValue; return true; case 2: //magnitude Effects.value[ListIndex]->EFIT->magnitude = *(float *)FieldValue; break; case 3: //area Effects.value[ListIndex]->EFIT->area = *(uint32_t *)FieldValue; break; case 4: //duration Effects.value[ListIndex]->EFIT->duration = *(uint32_t *)FieldValue; break; case 5: //conditions if (ListX2FieldID == 0) //conditionsSize { Effects.value[ListIndex]->CTDA.resize(ArraySize); return false; } if (ListX2Index >= Effects.value[ListIndex]->CTDA.value.size()) break; switch (ListX2FieldID) { case 1: //operType Effects.value[ListIndex]->CTDA.value[ListX2Index]->CTDA->operType = *(uint8_t *)FieldValue; break; case 2: //unused1 if (ArraySize != 3) break; Effects.value[ListIndex]->CTDA.value[ListX2Index]->CTDA->unused1[0] = ((UINT8ARRAY)FieldValue)[0]; Effects.value[ListIndex]->CTDA.value[ListX2Index]->CTDA->unused1[1] = ((UINT8ARRAY)FieldValue)[1]; Effects.value[ListIndex]->CTDA.value[ListX2Index]->CTDA->unused1[2] = ((UINT8ARRAY)FieldValue)[2]; break; case 3: //compValue Effects.value[ListIndex]->CTDA.value[ListX2Index]->CTDA->compValue = *(FORMID_OR_FLOAT32 *)FieldValue; return true; case 4: //ifunc Effects.value[ListIndex]->CTDA.value[ListX2Index]->CTDA->ifunc = *(uint16_t *)FieldValue; return true; case 5: //unused2 if (ArraySize != 2) break; Effects.value[ListIndex]->CTDA.value[ListX2Index]->CTDA->unused2[0] = ((UINT8ARRAY)FieldValue)[0]; Effects.value[ListIndex]->CTDA.value[ListX2Index]->CTDA->unused2[1] = ((UINT8ARRAY)FieldValue)[1]; break; case 6: //param1 Effects.value[ListIndex]->CTDA.value[ListX2Index]->CTDA->param1 = *(FORMID_OR_UINT32 *)FieldValue; return true; case 7: //param2 Effects.value[ListIndex]->CTDA.value[ListX2Index]->CTDA->param2 = *(FORMID_OR_UINT32 *)FieldValue; return true; case 8: //runOnType Effects.value[ListIndex]->CTDA.value[ListX2Index]->CTDA->runOnType = *(uint32_t *)FieldValue; true; case 9: //reference Effects.value[ListIndex]->CTDA.value[ListX2Index]->CTDA->reference = *(FORMID_OR_UINT32 *)FieldValue; return true; case 10: //param3 Effects.value[ListIndex]->CTDA.value[ListX2Index]->CTDA->param3 = *(int32_t *)FieldValue; break; case 11: //cis1 Effects.value[ListIndex]->CTDA.value[ListX2Index]->CIS1.Copy((char *)FieldValue); return true; // affects how param1 is interpreted case 12: //cis2 Effects.value[ListIndex]->CTDA.value[ListX2Index]->CIS2.Copy((char *)FieldValue); return true; // affects how param2 is interpreted default: break; } break; default: break; } break; default: break; } return false; }
bool PROJRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize) { switch(FieldID) { case 1: //flags1 SetHeaderFlagMask(*(UINT32 *)FieldValue); break; case 3: //versionControl1 if(ArraySize != 4) break; ((UINT8ARRAY)&flagsUnk)[0] = ((UINT8ARRAY)FieldValue)[0]; ((UINT8ARRAY)&flagsUnk)[1] = ((UINT8ARRAY)FieldValue)[1]; ((UINT8ARRAY)&flagsUnk)[2] = ((UINT8ARRAY)FieldValue)[2]; ((UINT8ARRAY)&flagsUnk)[3] = ((UINT8ARRAY)FieldValue)[3]; break; case 4: //eid EDID.Copy((STRING)FieldValue); break; case 5: //formVersion formVersion = *(UINT16 *)FieldValue; break; case 6: //versionControl2 if(ArraySize != 2) break; versionControl2[0] = ((UINT8ARRAY)FieldValue)[0]; versionControl2[1] = ((UINT8ARRAY)FieldValue)[1]; break; case 7: //boundX1 OBND.value.x1 = *(SINT16 *)FieldValue; break; case 8: //boundY1 OBND.value.y1 = *(SINT16 *)FieldValue; break; case 9: //boundZ1 OBND.value.z1 = *(SINT16 *)FieldValue; break; case 10: //boundX2 OBND.value.x2 = *(SINT16 *)FieldValue; break; case 11: //boundY2 OBND.value.y2 = *(SINT16 *)FieldValue; break; case 12: //boundZ2 OBND.value.z2 = *(SINT16 *)FieldValue; break; case 13: //full FULL.Copy((STRING)FieldValue); break; case 14: //modPath MODL.Load(); MODL->MODL.Copy((STRING)FieldValue); break; case 15: //modb MODL.Load(); MODL->MODB.value = *(FLOAT32 *)FieldValue; break; case 16: //modt_p MODL.Load(); MODL->MODT.Copy((UINT8ARRAY)FieldValue, ArraySize); break; case 17: //altTextures MODL.Load(); if(ListFieldID == 0) //altTexturesSize { MODL->Textures.resize(ArraySize); return false; } if(ListIndex >= MODL->Textures.MODS.size()) break; switch(ListFieldID) { case 1: //name delete []MODL->Textures.MODS[ListIndex]->name; MODL->Textures.MODS[ListIndex]->name = NULL; if(FieldValue != NULL) { ArraySize = (UINT32)strlen((STRING)FieldValue) + 1; MODL->Textures.MODS[ListIndex]->name = new char[ArraySize]; strcpy_s(MODL->Textures.MODS[ListIndex]->name, ArraySize, (STRING)FieldValue); } break; case 2: //texture MODL->Textures.MODS[ListIndex]->texture = *(FORMID *)FieldValue; return true; case 3: //index MODL->Textures.MODS[ListIndex]->index = *(SINT32 *)FieldValue; break; default: break; } break; case 18: //modelFlags MODL.Load(); MODL->SetFlagMask(*(UINT8 *)FieldValue); break; case 19: //destructableHealth Destructable.Load(); Destructable->DEST.value.health = *(SINT32 *)FieldValue; break; case 20: //destructableCount Destructable.Load(); Destructable->DEST.value.count = *(UINT8 *)FieldValue; break; case 21: //destructableFlags Destructable.Load(); Destructable->SetFlagMask(*(UINT8 *)FieldValue); break; case 22: //destructableUnused1 if(ArraySize != 2) break; Destructable.Load(); Destructable->DEST.value.unused1[0] = ((UINT8ARRAY)FieldValue)[0]; Destructable->DEST.value.unused1[1] = ((UINT8ARRAY)FieldValue)[1]; break; case 23: //destructableStages Destructable.Load(); if(ListFieldID == 0) //destructableStagesSize { Destructable->Stages.resize(ArraySize); return false; } if(ListIndex >= Destructable->Stages.value.size()) break; switch(ListFieldID) { case 1: //health Destructable->Stages.value[ListIndex]->DSTD.value.health = *(UINT8 *)FieldValue; break; case 2: //index Destructable->Stages.value[ListIndex]->DSTD.value.index = *(UINT8 *)FieldValue; break; case 3: //stage Destructable->Stages.value[ListIndex]->DSTD.value.stage = *(UINT8 *)FieldValue; break; case 4: //flags Destructable->Stages.value[ListIndex]->SetFlagMask(*(UINT8 *)FieldValue); break; case 5: //dps Destructable->Stages.value[ListIndex]->DSTD.value.dps = *(SINT32 *)FieldValue; break; case 6: //explosion Destructable->Stages.value[ListIndex]->DSTD.value.explosion = *(FORMID *)FieldValue; return true; case 7: //debris Destructable->Stages.value[ListIndex]->DSTD.value.debris = *(FORMID *)FieldValue; return true; case 8: //debrisCount Destructable->Stages.value[ListIndex]->DSTD.value.debrisCount = *(SINT32 *)FieldValue; break; case 9: //modPath Destructable->Stages.value[ListIndex]->DMDL.Copy((STRING)FieldValue); break; case 10: //modt_p Destructable->Stages.value[ListIndex]->DMDT.Copy((UINT8ARRAY)FieldValue, ArraySize); break; default: break; } break; case 24: //flags SetFlagMask(*(UINT16 *)FieldValue); break; case 25: //projType SetType(*(UINT16 *)FieldValue); break; case 26: //gravity DATA.value.gravity = *(FLOAT32 *)FieldValue; break; case 27: //speed DATA.value.speed = *(FLOAT32 *)FieldValue; break; case 28: //range DATA.value.range = *(FLOAT32 *)FieldValue; break; case 29: //light DATA.value.light = *(FORMID *)FieldValue; return true; case 30: //flash DATA.value.flash = *(FORMID *)FieldValue; return true; case 31: //tracerChance DATA.value.tracerChance = *(FLOAT32 *)FieldValue; break; case 32: //altExplProximityTrigger DATA.value.altExplProximityTrigger = *(FLOAT32 *)FieldValue; break; case 33: //altExplProximityTimer DATA.value.altExplProximityTimer = *(FLOAT32 *)FieldValue; break; case 34: //explosion DATA.value.explosion = *(FORMID *)FieldValue; return true; case 35: //sound DATA.value.sound = *(FORMID *)FieldValue; return true; case 36: //flashDuration DATA.value.flashDuration = *(FLOAT32 *)FieldValue; break; case 37: //fadeDuration DATA.value.fadeDuration = *(FLOAT32 *)FieldValue; break; case 38: //impactForce DATA.value.impactForce = *(FLOAT32 *)FieldValue; break; case 39: //soundCountdown DATA.value.soundCountdown = *(FORMID *)FieldValue; return true; case 40: //soundDisable DATA.value.soundDisable = *(FORMID *)FieldValue; return true; case 41: //defaultWeaponSource DATA.value.defaultWeaponSource = *(FORMID *)FieldValue; return true; case 42: //rotX DATA.value.rotX = *(FLOAT32 *)FieldValue; break; case 43: //rotY DATA.value.rotY = *(FLOAT32 *)FieldValue; break; case 44: //rotZ DATA.value.rotZ = *(FLOAT32 *)FieldValue; break; case 45: //bouncyMult DATA.value.bouncyMult = *(FLOAT32 *)FieldValue; break; case 46: //modelPath NAM1.Copy((STRING)FieldValue); break; case 47: //nam2_p NAM2.Copy((UINT8ARRAY)FieldValue, ArraySize); break; case 48: //soundLevel SetSoundLevelType(*(UINT32 *)FieldValue); break; default: break; } return false; }
bool PMISRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize) { switch(FieldID) { case 1: //flags1 SetHeaderFlagMask(*(UINT32 *)FieldValue); break; case 3: //versionControl1 if(ArraySize != 4) break; ((UINT8ARRAY)&flagsUnk)[0] = ((UINT8ARRAY)FieldValue)[0]; ((UINT8ARRAY)&flagsUnk)[1] = ((UINT8ARRAY)FieldValue)[1]; ((UINT8ARRAY)&flagsUnk)[2] = ((UINT8ARRAY)FieldValue)[2]; ((UINT8ARRAY)&flagsUnk)[3] = ((UINT8ARRAY)FieldValue)[3]; break; case 4: //eid EDID.Copy((STRING)FieldValue); break; case 5: //formVersion formVersion = *(UINT16 *)FieldValue; break; case 6: //versionControl2 if(ArraySize != 2) break; versionControl2[0] = ((UINT8ARRAY)FieldValue)[0]; versionControl2[1] = ((UINT8ARRAY)FieldValue)[1]; break; case 7: //base NAME.value = *(FORMID *)FieldValue; return true; case 8: //encounterZone XEZN.value = *(FORMID *)FieldValue; return true; case 9: //xrgd_p XRGD.Copy((UINT8ARRAY)FieldValue, ArraySize); break; case 10: //xrgb_p XRGB.Copy((UINT8ARRAY)FieldValue, ArraySize); break; case 11: //idleTime Patrol.Load(); Patrol->XPRD.value = *(FLOAT32 *)FieldValue; break; case 12: //idle Patrol.Load(); Patrol->INAM.value = *(FORMID *)FieldValue; return true; case 13: //unused1 if(ArraySize != 4) break; Patrol.Load(); Patrol->SCHR.value.unused1[0] = ((UINT8ARRAY)FieldValue)[0]; Patrol->SCHR.value.unused1[1] = ((UINT8ARRAY)FieldValue)[1]; Patrol->SCHR.value.unused1[2] = ((UINT8ARRAY)FieldValue)[2]; Patrol->SCHR.value.unused1[3] = ((UINT8ARRAY)FieldValue)[3]; break; case 14: //numRefs Patrol.Load(); Patrol->SCHR.value.numRefs = *(UINT32 *)FieldValue; break; case 15: //compiledSize Patrol.Load(); Patrol->SCHR.value.compiledSize = *(UINT32 *)FieldValue; break; case 16: //lastIndex Patrol.Load(); Patrol->SCHR.value.lastIndex = *(UINT32 *)FieldValue; break; case 17: //scriptType Patrol.Load(); Patrol->SetType(*(UINT16 *)FieldValue); break; case 18: //scriptFlags Patrol.Load(); Patrol->SetScriptFlagMask(*(UINT16 *)FieldValue); break; case 19: //compiled_p Patrol.Load(); Patrol->SCDA.Copy((UINT8ARRAY)FieldValue, ArraySize); Patrol->SCHR.value.compiledSize = ArraySize; break; case 20: //scriptText Patrol.Load(); Patrol->SCTX.Copy((STRING)FieldValue); break; case 21: //vars Patrol.Load(); if(ListFieldID == 0) //varsSize { Patrol->VARS.resize(ArraySize); return false; } if(ListIndex >= Patrol->VARS.value.size()) break; switch(ListFieldID) { case 1: //index Patrol->VARS.value[ListIndex]->SLSD.value.index = *(UINT32 *)FieldValue; break; case 2: //unused1 if(ArraySize != 12) break; Patrol->VARS.value[ListIndex]->SLSD.value.unused1[0] = ((UINT8ARRAY)FieldValue)[0]; Patrol->VARS.value[ListIndex]->SLSD.value.unused1[1] = ((UINT8ARRAY)FieldValue)[1]; Patrol->VARS.value[ListIndex]->SLSD.value.unused1[2] = ((UINT8ARRAY)FieldValue)[2]; Patrol->VARS.value[ListIndex]->SLSD.value.unused1[3] = ((UINT8ARRAY)FieldValue)[3]; Patrol->VARS.value[ListIndex]->SLSD.value.unused1[4] = ((UINT8ARRAY)FieldValue)[4]; Patrol->VARS.value[ListIndex]->SLSD.value.unused1[5] = ((UINT8ARRAY)FieldValue)[5]; Patrol->VARS.value[ListIndex]->SLSD.value.unused1[6] = ((UINT8ARRAY)FieldValue)[6]; Patrol->VARS.value[ListIndex]->SLSD.value.unused1[7] = ((UINT8ARRAY)FieldValue)[7]; Patrol->VARS.value[ListIndex]->SLSD.value.unused1[8] = ((UINT8ARRAY)FieldValue)[8]; Patrol->VARS.value[ListIndex]->SLSD.value.unused1[9] = ((UINT8ARRAY)FieldValue)[9]; Patrol->VARS.value[ListIndex]->SLSD.value.unused1[10] = ((UINT8ARRAY)FieldValue)[10]; Patrol->VARS.value[ListIndex]->SLSD.value.unused1[11] = ((UINT8ARRAY)FieldValue)[11]; break; case 3: //flags Patrol->VARS.value[ListIndex]->SetFlagMask(*(UINT8 *)FieldValue); break; case 4: //unused2 if(ArraySize != 7) break; Patrol->VARS.value[ListIndex]->SLSD.value.unused2[0] = ((UINT8ARRAY)FieldValue)[0]; Patrol->VARS.value[ListIndex]->SLSD.value.unused2[1] = ((UINT8ARRAY)FieldValue)[1]; Patrol->VARS.value[ListIndex]->SLSD.value.unused2[2] = ((UINT8ARRAY)FieldValue)[2]; Patrol->VARS.value[ListIndex]->SLSD.value.unused2[3] = ((UINT8ARRAY)FieldValue)[3]; Patrol->VARS.value[ListIndex]->SLSD.value.unused2[4] = ((UINT8ARRAY)FieldValue)[4]; Patrol->VARS.value[ListIndex]->SLSD.value.unused2[5] = ((UINT8ARRAY)FieldValue)[5]; Patrol->VARS.value[ListIndex]->SLSD.value.unused2[6] = ((UINT8ARRAY)FieldValue)[6]; break; case 5: //name Patrol->VARS.value[ListIndex]->SCVR.Copy((STRING)FieldValue); break; default: break; } break; case 22: //references Patrol.Load(); if(ListFieldID == 0) //referencesSize { Patrol->SCR_.resize(ArraySize); return false; } if(ListIndex >= Patrol->SCR_.value.size()) break; switch(ListFieldID) { case 1: //reference //Borrowing ArraySize to flag if the new value is a formID Patrol->SCR_.value[ListIndex]->reference = *(UINT32 *)FieldValue; Patrol->SCR_.value[ListIndex]->isSCRO = ArraySize ? true : false; return ArraySize != 0; default: break; } break; case 23: //topic Patrol.Load(); Patrol->TNAM.value = *(FORMID *)FieldValue; return true; case 24: //owner Ownership.Load(); Ownership->XOWN.value = *(FORMID *)FieldValue; return true; case 25: //rank Ownership.Load(); *Ownership->XRNK.value = *(SINT32 *)FieldValue; break; case 26: //count XCNT.value = *(SINT32 *)FieldValue; break; case 27: //radius XRDS.value = *(FLOAT32 *)FieldValue; break; case 28: //health XHLP.value = *(FLOAT32 *)FieldValue; break; case 29: //decals if(ListFieldID == 0) //decalsSize { XDCR.resize(ArraySize); return false; } if(ListIndex >= XDCR.value.size()) break; switch(ListFieldID) { case 1: //reference XDCR.value[ListIndex]->reference = *(FORMID *)FieldValue; return true; case 2: //unknown1 if(ArraySize != 24) break; XDCR.value[ListIndex]->unknown1[0] = ((UINT8ARRAY)FieldValue)[0]; XDCR.value[ListIndex]->unknown1[1] = ((UINT8ARRAY)FieldValue)[1]; XDCR.value[ListIndex]->unknown1[2] = ((UINT8ARRAY)FieldValue)[2]; XDCR.value[ListIndex]->unknown1[3] = ((UINT8ARRAY)FieldValue)[3]; XDCR.value[ListIndex]->unknown1[4] = ((UINT8ARRAY)FieldValue)[4]; XDCR.value[ListIndex]->unknown1[5] = ((UINT8ARRAY)FieldValue)[5]; XDCR.value[ListIndex]->unknown1[6] = ((UINT8ARRAY)FieldValue)[6]; XDCR.value[ListIndex]->unknown1[7] = ((UINT8ARRAY)FieldValue)[7]; XDCR.value[ListIndex]->unknown1[8] = ((UINT8ARRAY)FieldValue)[8]; XDCR.value[ListIndex]->unknown1[9] = ((UINT8ARRAY)FieldValue)[9]; XDCR.value[ListIndex]->unknown1[10] = ((UINT8ARRAY)FieldValue)[10]; XDCR.value[ListIndex]->unknown1[11] = ((UINT8ARRAY)FieldValue)[11]; XDCR.value[ListIndex]->unknown1[12] = ((UINT8ARRAY)FieldValue)[12]; XDCR.value[ListIndex]->unknown1[13] = ((UINT8ARRAY)FieldValue)[13]; XDCR.value[ListIndex]->unknown1[14] = ((UINT8ARRAY)FieldValue)[14]; XDCR.value[ListIndex]->unknown1[15] = ((UINT8ARRAY)FieldValue)[15]; XDCR.value[ListIndex]->unknown1[16] = ((UINT8ARRAY)FieldValue)[16]; XDCR.value[ListIndex]->unknown1[17] = ((UINT8ARRAY)FieldValue)[17]; XDCR.value[ListIndex]->unknown1[18] = ((UINT8ARRAY)FieldValue)[18]; XDCR.value[ListIndex]->unknown1[19] = ((UINT8ARRAY)FieldValue)[19]; XDCR.value[ListIndex]->unknown1[20] = ((UINT8ARRAY)FieldValue)[20]; XDCR.value[ListIndex]->unknown1[21] = ((UINT8ARRAY)FieldValue)[21]; XDCR.value[ListIndex]->unknown1[22] = ((UINT8ARRAY)FieldValue)[22]; XDCR.value[ListIndex]->unknown1[23] = ((UINT8ARRAY)FieldValue)[23]; break; default: break; } break; case 30: //linkedReference XLKR.value = *(FORMID *)FieldValue; return true; case 31: //startRed XCLP.Load(); XCLP->start.red = *(UINT8 *)FieldValue; break; case 32: //startGreen XCLP.Load(); XCLP->start.green = *(UINT8 *)FieldValue; break; case 33: //startBlue XCLP.Load(); XCLP->start.blue = *(UINT8 *)FieldValue; break; case 34: //unused2 if(ArraySize != 1) break; XCLP.Load(); XCLP->start.unused1 = ((UINT8ARRAY)FieldValue)[0]; break; case 35: //endRed XCLP.Load(); XCLP->end.red = *(UINT8 *)FieldValue; break; case 36: //endGreen XCLP.Load(); XCLP->end.green = *(UINT8 *)FieldValue; break; case 37: //endBlue XCLP.Load(); XCLP->end.blue = *(UINT8 *)FieldValue; break; case 38: //unused3 if(ArraySize != 1) break; XCLP.Load(); XCLP->end.unused1 = ((UINT8ARRAY)FieldValue)[0]; break; case 39: //activateParentFlags ActivateParents.Load(); ActivateParents->SetFlagMask(*(UINT8 *)FieldValue); break; case 40: //activateParentRefs ActivateParents.Load(); if(ListFieldID == 0) //activateParentRefsSize { ActivateParents->XAPR.resize(ArraySize); return false; } if(ListIndex >= ActivateParents->XAPR.value.size()) break; switch(ListFieldID) { case 1: //reference ActivateParents->XAPR.value[ListIndex]->reference = *(FORMID *)FieldValue; return true; case 2: //delay ActivateParents->XAPR.value[ListIndex]->delay = *(FLOAT32 *)FieldValue; break; default: break; } break; case 41: //prompt XATO.Copy((STRING)FieldValue); break; case 42: //parent XESP.Load(); XESP->parent = *(FORMID *)FieldValue; return true; case 43: //parentFlags SetFlagMask(*(UINT8 *)FieldValue); break; case 44: //unused4 if(ArraySize != 3) break; XESP.Load(); XESP->unused1[0] = ((UINT8ARRAY)FieldValue)[0]; XESP->unused1[1] = ((UINT8ARRAY)FieldValue)[1]; XESP->unused1[2] = ((UINT8ARRAY)FieldValue)[2]; break; case 45: //emittance XEMI.value = *(FORMID *)FieldValue; return true; case 46: //boundRef XMBR.value = *(FORMID *)FieldValue; return true; case 47: //reflrefrs if(ListFieldID == 0) //reflrefrsSize { XPWR.resize(ArraySize); return false; } if(ListIndex >= XPWR.value.size()) break; switch(ListFieldID) { case 1: //reference XPWR.value[ListIndex]->reference = *(FORMID *)FieldValue; return true; case 2: //type XPWR.value[ListIndex]->type = *(UINT32 *)FieldValue; break; default: break; } break; case 48: //ignoredBySandbox XIBS.value = *(UINT8 *)FieldValue; break; case 49: //scale XSCL.value = *(FLOAT32 *)FieldValue; break; case 50: //posX DATA.value.posX = *(FLOAT32 *)FieldValue; break; case 51: //posY DATA.value.posY = *(FLOAT32 *)FieldValue; break; case 52: //posZ DATA.value.posZ = *(FLOAT32 *)FieldValue; break; case 53: //rotX DATA.value.rotX = *(FLOAT32 *)FieldValue; break; case 54: //rotY DATA.value.rotY = *(FLOAT32 *)FieldValue; break; case 55: //rotZ DATA.value.rotZ = *(FLOAT32 *)FieldValue; break; default: break; } return false; }
bool CELLRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, uint32_t ArraySize) { switch(FieldID) { case 1: //flags1 SetHeaderFlagMask(*(uint32_t *)FieldValue); break; case 3: //versionControl1 if(ArraySize != 4) break; ((UINT8ARRAY)&flagsUnk)[0] = ((UINT8ARRAY)FieldValue)[0]; ((UINT8ARRAY)&flagsUnk)[1] = ((UINT8ARRAY)FieldValue)[1]; ((UINT8ARRAY)&flagsUnk)[2] = ((UINT8ARRAY)FieldValue)[2]; ((UINT8ARRAY)&flagsUnk)[3] = ((UINT8ARRAY)FieldValue)[3]; break; case 4: //eid EDID.Copy((char *)FieldValue); break; case 5: //formVersion formVersion = *(uint16_t *)FieldValue; break; case 6: //versionControl2 if(ArraySize != 2) break; versionControl2[0] = ((UINT8ARRAY)FieldValue)[0]; versionControl2[1] = ((UINT8ARRAY)FieldValue)[1]; break; case 7: //full FULL.Copy((char *)FieldValue); break; case 8: //flags SetFlagMask(*(uint8_t *)FieldValue); break; case 9: //posX if(IsInterior()) break; XCLC.Load(); XCLC->posX = *(int32_t *)FieldValue; break; case 10: //posY if(IsInterior()) break; XCLC.Load(); XCLC->posY = *(int32_t *)FieldValue; break; case 11: //quadFlags if(IsInterior()) break; SetQuadFlagMask(*(uint32_t *)FieldValue); break; #if 0 case 12: //ambientRed XCLL.Load(); XCLL->ambient.red = *(uint8_t *)FieldValue; break; case 13: //ambientGreen XCLL.Load(); XCLL->ambient.green = *(uint8_t *)FieldValue; break; case 14: //ambientBlue XCLL.Load(); XCLL->ambient.blue = *(uint8_t *)FieldValue; break; case 15: //unused1 if(ArraySize != 1) break; XCLL.Load(); XCLL->ambient.unused1 = ((UINT8ARRAY)FieldValue)[0]; break; case 16: //directionalRed XCLL.Load(); XCLL->directional.red = *(uint8_t *)FieldValue; break; case 17: //directionalGreen XCLL.Load(); XCLL->directional.green = *(uint8_t *)FieldValue; break; case 18: //directionalBlue XCLL.Load(); XCLL->directional.blue = *(uint8_t *)FieldValue; break; case 19: //unused2 if(ArraySize != 1) break; XCLL.Load(); XCLL->directional.unused1 = ((UINT8ARRAY)FieldValue)[0]; break; case 20: //fogRed XCLL.Load(); XCLL->fog.red = *(uint8_t *)FieldValue; break; case 21: //fogGreen XCLL.Load(); XCLL->fog.green = *(uint8_t *)FieldValue; break; case 22: //fogBlue XCLL.Load(); XCLL->fog.blue = *(uint8_t *)FieldValue; break; case 23: //unused3 if(ArraySize != 1) break; XCLL.Load(); XCLL->fog.unused1 = ((UINT8ARRAY)FieldValue)[0]; break; case 24: //fogNear XCLL.Load(); XCLL->fogNear = *(float *)FieldValue; break; case 25: //fogFar XCLL.Load(); XCLL->fogFar = *(float *)FieldValue; break; case 26: //directionalXY XCLL.Load(); XCLL->directionalXY = *(int32_t *)FieldValue; break; case 27: //directionalZ XCLL.Load(); XCLL->directionalZ = *(int32_t *)FieldValue; break; case 28: //directionalFade XCLL.Load(); XCLL->directionalFade = *(float *)FieldValue; break; case 29: //fogClip XCLL.Load(); XCLL->fogClip = *(float *)FieldValue; break; case 30: //fogPower XCLL.Load(); XCLL->fogPower = *(float *)FieldValue; break; #endif case 31: //swappedImpacts if(ListFieldID == 0) //swappedImpactsSize { IMPS.resize(ArraySize); return false; } if(ListIndex >= IMPS.value.size()) break; switch(ListFieldID) { case 1: //material IMPS.value[ListIndex]->material = *(uint32_t *)FieldValue; break; case 2: //oldImpact IMPS.value[ListIndex]->oldImpact = *(FORMID *)FieldValue; return true; case 3: //newImpact IMPS.value[ListIndex]->newImpact = *(FORMID *)FieldValue; return true; default: break; } break; case 32: //concSolid if(FieldValue == NULL) break; ArraySize = (uint32_t)strlen((char *)FieldValue); if(ArraySize > 29) break; IMPF.Load(); memset(&IMPF->concSolid[0], 0x00, sizeof(IMPF->concSolid)); memcpy(&IMPF->concSolid[0], FieldValue, ArraySize); break; case 33: //concBroken if(FieldValue == NULL) break; ArraySize = (uint32_t)strlen((char *)FieldValue); if(ArraySize > 29) break; IMPF.Load(); memset(&IMPF->concBroken[0], 0x00, sizeof(IMPF->concBroken)); memcpy(&IMPF->concBroken[0], FieldValue, ArraySize); break; case 34: //metalSolid if(FieldValue == NULL) break; ArraySize = (uint32_t)strlen((char *)FieldValue); if(ArraySize > 29) break; IMPF.Load(); memset(&IMPF->metalSolid[0], 0x00, sizeof(IMPF->metalSolid)); memcpy(&IMPF->metalSolid[0], FieldValue, ArraySize); break; case 35: //metalHollow if(FieldValue == NULL) break; ArraySize = (uint32_t)strlen((char *)FieldValue); if(ArraySize > 29) break; IMPF.Load(); memset(&IMPF->metalHollow[0], 0x00, sizeof(IMPF->metalHollow)); memcpy(&IMPF->metalHollow[0], FieldValue, ArraySize); break; case 36: //metalSheet if(FieldValue == NULL) break; ArraySize = (uint32_t)strlen((char *)FieldValue); if(ArraySize > 29) break; IMPF.Load(); memset(&IMPF->metalSheet[0], 0x00, sizeof(IMPF->metalSheet)); memcpy(&IMPF->metalSheet[0], FieldValue, ArraySize); break; case 37: //wood if(FieldValue == NULL) break; ArraySize = (uint32_t)strlen((char *)FieldValue); if(ArraySize > 29) break; IMPF.Load(); memset(&IMPF->wood[0], 0x00, sizeof(IMPF->wood)); memcpy(&IMPF->wood[0], FieldValue, ArraySize); break; case 38: //sand if(FieldValue == NULL) break; ArraySize = (uint32_t)strlen((char *)FieldValue); if(ArraySize > 29) break; IMPF.Load(); memset(&IMPF->sand[0], 0x00, sizeof(IMPF->sand)); memcpy(&IMPF->sand[0], FieldValue, ArraySize); break; case 39: //dirt if(FieldValue == NULL) break; ArraySize = (uint32_t)strlen((char *)FieldValue); if(ArraySize > 29) break; IMPF.Load(); memset(&IMPF->dirt[0], 0x00, sizeof(IMPF->dirt)); memcpy(&IMPF->dirt[0], FieldValue, ArraySize); break; case 40: //grass if(FieldValue == NULL) break; ArraySize = (uint32_t)strlen((char *)FieldValue); if(ArraySize > 29) break; IMPF.Load(); memset(&IMPF->grass[0], 0x00, sizeof(IMPF->grass)); memcpy(&IMPF->grass[0], FieldValue, ArraySize); break; case 41: //water if(FieldValue == NULL) break; ArraySize = (uint32_t)strlen((char *)FieldValue); if(ArraySize > 29) break; IMPF.Load(); memset(&IMPF->water[0], 0x00, sizeof(IMPF->water)); memcpy(&IMPF->water[0], FieldValue, ArraySize); break; case 42: //lightTemplate LTMP.value = *(FORMID *)FieldValue; return true; case 43: //lightFlags SetLightFlagMask(*(uint32_t *)FieldValue); break; case 44: //waterHeight XCLW.value = *(float *)FieldValue; break; case 45: //waterNoisePath XNAM.Copy((char *)FieldValue); break; case 46: //regions XCLR.value.resize(ArraySize); for(uint32_t x = 0; x < ArraySize; x++) XCLR.value[x] = ((FORMIDARRAY)FieldValue)[x]; return true; case 47: //imageSpace XCIM.value = *(FORMID *)FieldValue; return true; case 48: //xcet_p XCET.Copy((UINT8ARRAY)FieldValue, ArraySize); break; case 49: //encounterZone XEZN.value = *(FORMID *)FieldValue; return true; case 50: //climate XCCM.value = *(FORMID *)FieldValue; return true; case 51: //water XCWT.value = *(FORMID *)FieldValue; return true; #if 0 case 52: //owner Ownership.Load(); Ownership->XOWN.value = *(FORMID *)FieldValue; return true; case 53: //rank Ownership.Load(); Ownership->XRNK.Load(); *Ownership->XRNK.value = *(int32_t *)FieldValue; break; #endif case 54: //acousticSpace XCAS.value = *(FORMID *)FieldValue; return true; case 55: //xcmt_p XCMT.Copy((UINT8ARRAY)FieldValue, ArraySize); break; case 56: //music XCMO.value = *(FORMID *)FieldValue; return true; default: break; } return false; }
bool EXPLRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, uint32_t ArraySize) { switch(FieldID) { case 1: //flags1 SetHeaderFlagMask(*(uint32_t *)FieldValue); break; case 3: //versionControl1 if(ArraySize != 4) break; ((UINT8ARRAY)&flagsUnk)[0] = ((UINT8ARRAY)FieldValue)[0]; ((UINT8ARRAY)&flagsUnk)[1] = ((UINT8ARRAY)FieldValue)[1]; ((UINT8ARRAY)&flagsUnk)[2] = ((UINT8ARRAY)FieldValue)[2]; ((UINT8ARRAY)&flagsUnk)[3] = ((UINT8ARRAY)FieldValue)[3]; break; case 4: //eid EDID.Copy((char *)FieldValue); break; case 5: //formVersion formVersion = *(uint16_t *)FieldValue; break; case 6: //versionControl2 if(ArraySize != 2) break; versionControl2[0] = ((UINT8ARRAY)FieldValue)[0]; versionControl2[1] = ((UINT8ARRAY)FieldValue)[1]; break; case 7: //boundX1 OBND.value.x1 = *(int16_t *)FieldValue; break; case 8: //boundY1 OBND.value.y1 = *(int16_t *)FieldValue; break; case 9: //boundZ1 OBND.value.z1 = *(int16_t *)FieldValue; break; case 10: //boundX2 OBND.value.x2 = *(int16_t *)FieldValue; break; case 11: //boundY2 OBND.value.y2 = *(int16_t *)FieldValue; break; case 12: //boundZ2 OBND.value.z2 = *(int16_t *)FieldValue; break; case 13: //full FULL.Copy((char *)FieldValue); break; case 14: //modPath MODL.Load(); MODL->MODL.Copy((char *)FieldValue); break; case 15: //modb MODL.Load(); MODL->MODB.value = *(float *)FieldValue; break; case 16: //modt_p MODL.Load(); MODL->MODT.Copy((UINT8ARRAY)FieldValue, ArraySize); break; case 17: //altTextures MODL.Load(); if(ListFieldID == 0) //altTexturesSize { MODL->Textures.resize(ArraySize); return false; } if(ListIndex >= MODL->Textures.MODS.size()) break; switch(ListFieldID) { case 1: //name delete []MODL->Textures.MODS[ListIndex]->name; MODL->Textures.MODS[ListIndex]->name = NULL; if(FieldValue != NULL) { ArraySize = (uint32_t)strlen((char *)FieldValue) + 1; MODL->Textures.MODS[ListIndex]->name = new char[ArraySize]; strcpy_s(MODL->Textures.MODS[ListIndex]->name, ArraySize, (char *)FieldValue); } break; case 2: //texture MODL->Textures.MODS[ListIndex]->texture = *(FORMID *)FieldValue; return true; case 3: //index MODL->Textures.MODS[ListIndex]->index = *(int32_t *)FieldValue; break; default: break; } break; case 18: //modelFlags MODL.Load(); MODL->SetFlagMask(*(uint8_t *)FieldValue); break; case 19: //effect EITM.value = *(FORMID *)FieldValue; return true; case 20: //imageSpace MNAM.value = *(FORMID *)FieldValue; return true; case 21: //force DATA.value.force = *(float *)FieldValue; break; case 22: //damage DATA.value.damage = *(float *)FieldValue; break; case 23: //radius DATA.value.radius = *(float *)FieldValue; break; case 24: //light DATA.value.light = *(FORMID *)FieldValue; return true; case 25: //sound1 DATA.value.sound1 = *(FORMID *)FieldValue; return true; case 26: //flags SetFlagMask(*(uint32_t *)FieldValue); break; case 27: //ISRadius DATA.value.ISRadius = *(float *)FieldValue; break; case 28: //impactDataSet DATA.value.impactDataSet = *(FORMID *)FieldValue; return true; case 29: //sound2 DATA.value.sound2 = *(FORMID *)FieldValue; return true; case 30: //radLevel DATA.value.radLevel = *(float *)FieldValue; break; case 31: //radTime DATA.value.radTime = *(float *)FieldValue; break; case 32: //radRadius DATA.value.radRadius = *(float *)FieldValue; break; case 33: //soundLevel DATA.value.soundLevel = *(uint32_t *)FieldValue; break; case 34: //impact INAM.value = *(FORMID *)FieldValue; return true; default: break; } return false; }
void SPELRecord::DeleteField(FIELD_IDENTIFIERS) { SPELSPIT defaultSPIT; FNVCTDA defaultCTDA; FNVEffect defaultEffect; switch(FieldID) { case 1: //flags1 SetHeaderFlagMask(0); return; case 3: //versionControl1 flagsUnk = 0; return; case 4: //eid EDID.Unload(); return; case 5: //formVersion formVersion = 0; return; case 6: //versionControl2 versionControl2[0] = 0; versionControl2[1] = 0; return; case 7: //full FULL.Unload(); return; case 8: //spellType SetType(defaultSPIT.spellType); return; case 9: //costUnused SPIT.value.cost = defaultSPIT.cost; return; case 10: //levelTypeUnused SPIT.value.levelType = defaultSPIT.levelType; return; case 11: //flags SetFlagMask(defaultSPIT.flags); return; case 12: //unused1 SPIT.value.unused1[0] = defaultSPIT.unused1[0]; SPIT.value.unused1[1] = defaultSPIT.unused1[1]; SPIT.value.unused1[2] = defaultSPIT.unused1[2]; return; case 13: //effects if(ListFieldID == 0) //effectsSize { Effects.Unload(); return; } if(ListIndex >= Effects.value.size()) return; switch(ListFieldID) { case 1: //effect Effects.value[ListIndex]->EFID.value = defaultEffect.EFID.value; return; case 2: //magnitude Effects.value[ListIndex]->EFIT.value.magnitude = defaultEffect.EFIT.value.magnitude; return; case 3: //area Effects.value[ListIndex]->EFIT.value.area = defaultEffect.EFIT.value.area; return; case 4: //duration Effects.value[ListIndex]->EFIT.value.duration = defaultEffect.EFIT.value.duration; return; case 5: //rangeType Effects.value[ListIndex]->SetRange(defaultEffect.EFIT.value.rangeType); return; case 6: //actorValue Effects.value[ListIndex]->EFIT.value.actorValue = defaultEffect.EFIT.value.actorValue; return; case 7: //conditions if(ListX2FieldID == 0) //conditionsSize { Effects.value[ListIndex]->CTDA.Unload(); return; } if(ListX2Index >= Effects.value[ListIndex]->CTDA.value.size()) return; switch(ListX2FieldID) { case 1: //operType Effects.value[ListIndex]->CTDA.value[ListX2Index]->operType = defaultCTDA.operType; return; case 2: //unused1 Effects.value[ListIndex]->CTDA.value[ListX2Index]->unused1[0] = defaultCTDA.unused1[0]; Effects.value[ListIndex]->CTDA.value[ListX2Index]->unused1[1] = defaultCTDA.unused1[1]; Effects.value[ListIndex]->CTDA.value[ListX2Index]->unused1[2] = defaultCTDA.unused1[2]; return; case 3: //compValue Effects.value[ListIndex]->CTDA.value[ListX2Index]->compValue = defaultCTDA.compValue; return; case 4: //ifunc Effects.value[ListIndex]->CTDA.value[ListX2Index]->ifunc = defaultCTDA.ifunc; return; case 5: //param1 Effects.value[ListIndex]->CTDA.value[ListX2Index]->param1 = defaultCTDA.param1; return; case 6: //param2 Effects.value[ListIndex]->CTDA.value[ListX2Index]->param2 = defaultCTDA.param2; return; case 7: //runOnType Effects.value[ListIndex]->CTDA.value[ListX2Index]->runOnType = defaultCTDA.runOnType; return; case 8: //reference Effects.value[ListIndex]->CTDA.value[ListX2Index]->reference = defaultCTDA.reference; return; default: return; } return; default: return; } return; default: return; } }
bool SPELRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize) { switch(FieldID) { case 1: //flags1 SetHeaderFlagMask(*(UINT32 *)FieldValue); break; case 3: //versionControl1 if(ArraySize != 4) break; ((UINT8ARRAY)&flagsUnk)[0] = ((UINT8ARRAY)FieldValue)[0]; ((UINT8ARRAY)&flagsUnk)[1] = ((UINT8ARRAY)FieldValue)[1]; ((UINT8ARRAY)&flagsUnk)[2] = ((UINT8ARRAY)FieldValue)[2]; ((UINT8ARRAY)&flagsUnk)[3] = ((UINT8ARRAY)FieldValue)[3]; break; case 4: //eid EDID.Copy((STRING)FieldValue); break; case 5: //formVersion formVersion = *(UINT16 *)FieldValue; break; case 6: //versionControl2 if(ArraySize != 2) break; versionControl2[0] = ((UINT8ARRAY)FieldValue)[0]; versionControl2[1] = ((UINT8ARRAY)FieldValue)[1]; break; case 7: //full FULL.Copy((STRING)FieldValue); break; case 8: //spellType SetType(*(UINT32 *)FieldValue); break; case 9: //costUnused SPIT.value.cost = *(UINT32 *)FieldValue; break; case 10: //levelTypeUnused SPIT.value.levelType = *(UINT32 *)FieldValue; break; case 11: //flags SetFlagMask(*(UINT8 *)FieldValue); break; case 12: //unused1 if(ArraySize != 3) break; SPIT.value.unused1[0] = ((UINT8ARRAY)FieldValue)[0]; SPIT.value.unused1[1] = ((UINT8ARRAY)FieldValue)[1]; SPIT.value.unused1[2] = ((UINT8ARRAY)FieldValue)[2]; break; case 13: //effects if(ListFieldID == 0) //effectsSize { Effects.resize(ArraySize); return false; } if(ListIndex >= Effects.value.size()) break; switch(ListFieldID) { case 1: //effect Effects.value[ListIndex]->EFID.value = *(FORMID *)FieldValue; return true; case 2: //magnitude Effects.value[ListIndex]->EFIT.value.magnitude = *(UINT32 *)FieldValue; break; case 3: //area Effects.value[ListIndex]->EFIT.value.area = *(UINT32 *)FieldValue; break; case 4: //duration Effects.value[ListIndex]->EFIT.value.duration = *(UINT32 *)FieldValue; break; case 5: //rangeType Effects.value[ListIndex]->SetRange(*(UINT32 *)FieldValue); break; case 6: //actorValue Effects.value[ListIndex]->EFIT.value.actorValue = *(SINT32 *)FieldValue; break; case 7: //conditions if(ListX2FieldID == 0) //conditionsSize { Effects.value[ListIndex]->CTDA.resize(ArraySize); return false; } if(ListX2Index >= Effects.value[ListIndex]->CTDA.value.size()) break; switch(ListX2FieldID) { case 1: //operType Effects.value[ListIndex]->CTDA.value[ListX2Index]->operType = *(UINT8 *)FieldValue; break; case 2: //unused1 if(ArraySize != 3) break; Effects.value[ListIndex]->CTDA.value[ListX2Index]->unused1[0] = ((UINT8ARRAY)FieldValue)[0]; Effects.value[ListIndex]->CTDA.value[ListX2Index]->unused1[1] = ((UINT8ARRAY)FieldValue)[1]; Effects.value[ListIndex]->CTDA.value[ListX2Index]->unused1[2] = ((UINT8ARRAY)FieldValue)[2]; break; case 3: //compValue Effects.value[ListIndex]->CTDA.value[ListX2Index]->compValue = *(FORMID_OR_FLOAT32 *)FieldValue; return true; case 4: //ifunc Effects.value[ListIndex]->CTDA.value[ListX2Index]->ifunc = *(UINT32 *)FieldValue; return true; case 5: //param1 Effects.value[ListIndex]->CTDA.value[ListX2Index]->param1 = *(FORMID_OR_UINT32 *)FieldValue; return true; case 6: //param2 Effects.value[ListIndex]->CTDA.value[ListX2Index]->param2 = *(FORMID_OR_UINT32 *)FieldValue; return true; case 7: //runOnType Effects.value[ListIndex]->CTDA.value[ListX2Index]->runOnType = *(UINT32 *)FieldValue; return true; case 8: //reference Effects.value[ListIndex]->CTDA.value[ListX2Index]->reference = *(FORMID_OR_UINT32 *)FieldValue; return true; default: break; } break; default: break; } break; default: break; } return false; }
bool MGEFRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize) { switch(FieldID) { case 1: //flags1 SetHeaderFlagMask(*(UINT32 *)FieldValue); break; case 2: //fid formID = *(FORMID *)FieldValue; break; case 3: //flags2 SetHeaderUnknownFlagMask(*(UINT32 *)FieldValue); break; case 4: //eid EDID.Copy((STRING)FieldValue); break; case 5: //full FULL.Copy((STRING)FieldValue); break; case 6: //text DESC.Copy((STRING)FieldValue); break; case 7: //iconPath ICON.Copy((STRING)FieldValue); break; case 8: //modPath MODL.Load(); MODL->MODL.Copy((STRING)FieldValue); break; case 9: //modb MODL.Load(); MODL->MODB.value = *(FLOAT32 *)FieldValue; break; case 10: //modt_p MODL.Load(); MODL->MODT.Copy((UINT8ARRAY)FieldValue, ArraySize); break; case 11: //flags SetFlagMask(*(UINT32 *)FieldValue); break; case 12: //baseCost DATA.value.baseCost = *(FLOAT32 *)FieldValue; break; case 13: //associated DATA.value.associated = *(FORMID_OR_MGEFCODE_OR_ACTORVALUE_OR_UINT32 *)FieldValue; return true; case 14: //school DATA.value.schoolType = *(UINT32 *)FieldValue; break; case 15: //resistValue DATA.value.resistValue = *(FORMID *)FieldValue; return true; case 16: //numCounters DATA.value.numCounters = *(UINT16 *)FieldValue; ESCE.value.resize(*(UINT16 *)FieldValue); break; case 17: //unused1 if(ArraySize != 2) break; DATA.value.unused1[0] = ((UINT8ARRAY)FieldValue)[0]; DATA.value.unused1[1] = ((UINT8ARRAY)FieldValue)[1]; break; case 18: //light DATA.value.light = *(FORMID *)FieldValue; return true; case 19: //projectileSpeed DATA.value.projectileSpeed = *(FLOAT32 *)FieldValue; break; case 20: //effectShader DATA.value.effectShader = *(FORMID *)FieldValue; return true; case 21: //enchantEffect DATA.value.enchantEffect = *(FORMID *)FieldValue; return true; case 22: //castingSound DATA.value.castingSound = *(FORMID *)FieldValue; return true; case 23: //boltSound DATA.value.boltSound = *(FORMID *)FieldValue; return true; case 24: //hitSound DATA.value.hitSound = *(FORMID *)FieldValue; return true; case 25: //areaSound DATA.value.areaSound = *(FORMID *)FieldValue; return true; case 26: //cefEnchantment DATA.value.cefEnchantment = *(FLOAT32 *)FieldValue; break; case 27: //cefBarter DATA.value.cefBarter = *(FLOAT32 *)FieldValue; break; case 28: //counterEffects ESCE.resize(ArraySize); for(UINT32 x = 0; x < ArraySize; x++) ESCE.value[x] = ((MGEFCODEARRAY)FieldValue)[x]; return true; //OBME Fields case 29: //recordVersion OBME.Load(); OBME->OBME.value.recordVersion = *(UINT8 *)FieldValue; break; case 30: //betaVersion OBME.Load(); OBME->OBME.value.betaVersion = *(UINT8 *)FieldValue; break; case 31: //minorVersion OBME.Load(); OBME->OBME.value.minorVersion = *(UINT8 *)FieldValue; break; case 32: //majorVersion OBME.Load(); OBME->OBME.value.majorVersion = *(UINT8 *)FieldValue; break; case 33: //mgefParamAInfo OBME.Load(); OBME->OBME.value.mgefParamAInfo = *(UINT8 *)FieldValue; return true; case 34: //mgefParamBInfo OBME.Load(); OBME->OBME.value.mgefParamBInfo = *(UINT8 *)FieldValue; return true; case 35: //reserved1 if(ArraySize != 0x2) break; OBME.Load(); OBME->OBME.value.reserved1[0] = ((UINT8ARRAY)FieldValue)[0]; OBME->OBME.value.reserved1[1] = ((UINT8ARRAY)FieldValue)[1]; break; case 36: //handlerCode OBME.Load(); OBME->OBME.value.handlerCode = *(UINT32 *)FieldValue; break; case 37: //OBMEFlags SetOBMEFlagMask(*(UINT32 *)FieldValue); break; case 38: //mgefParamB OBME.Load(); OBME->OBME.value.mgefParamB = *(FORMID_OR_MGEFCODE_OR_ACTORVALUE_OR_UINT32 *)FieldValue; return true; case 39: //reserved2 if(ArraySize != 0x1C) break; OBME.Load(); memcpy(&OBME->OBME.value.reserved2[0], &((UINT8ARRAY)FieldValue)[0], sizeof(OBME->OBME.value.reserved2)); break; case 40: //mgefCode OBME.Load(); OBME->EDDX.Load(); memcpy(&OBME->EDDX.value.mgefCode[0], FieldValue, sizeof(OBME->EDDX.value.mgefCode) - 1); OBME->EDDX.value.mgefCode[4] = 0; return true; case 41: //datx_p if(ArraySize != 0x20) break; OBME.Load(); OBME->DATX.Copy((UINT8ARRAY)FieldValue, ArraySize); break; default: break; } return false; }
bool FACTRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize) { switch(FieldID) { case 1: //flags1 SetHeaderFlagMask(*(UINT32 *)FieldValue); break; case 3: //versionControl1 if(ArraySize != 4) break; ((UINT8ARRAY)&flagsUnk)[0] = ((UINT8ARRAY)FieldValue)[0]; ((UINT8ARRAY)&flagsUnk)[1] = ((UINT8ARRAY)FieldValue)[1]; ((UINT8ARRAY)&flagsUnk)[2] = ((UINT8ARRAY)FieldValue)[2]; ((UINT8ARRAY)&flagsUnk)[3] = ((UINT8ARRAY)FieldValue)[3]; break; case 4: //eid EDID.Copy((STRING)FieldValue); break; case 5: //formVersion formVersion = *(UINT16 *)FieldValue; break; case 6: //versionControl2 if(ArraySize != 2) break; versionControl2[0] = ((UINT8ARRAY)FieldValue)[0]; versionControl2[1] = ((UINT8ARRAY)FieldValue)[1]; break; case 7: //full FULL.Copy((STRING)FieldValue); break; case 8: //relations if(ListFieldID == 0) //relationsSize { XNAM.resize(ArraySize); return false; } if(ListIndex >= XNAM.value.size()) break; switch(ListFieldID) { case 1: //faction XNAM.value[ListIndex]->faction = *(FORMID *)FieldValue; return true; case 2: //mod XNAM.value[ListIndex]->mod = *(SINT32 *)FieldValue; break; case 3: //groupReactionType XNAM.value[ListIndex]->SetType(*(UINT32 *)FieldValue); break; default: break; } break; case 9: //flags SetFlagMask(*(UINT8 *)FieldValue); break; case 10: //unused1 if(ArraySize != 2) break; DATA.value.unused1[0] = ((UINT8ARRAY)FieldValue)[0]; DATA.value.unused1[1] = ((UINT8ARRAY)FieldValue)[1]; break; case 11: //crimeGoldMultiplier CNAM.Load(); *CNAM.value = *(FLOAT32 *)FieldValue; break; case 12: //ranks if(ListFieldID == 0) //ranksSize { RNAM.resize(ArraySize); return false; } if(ListIndex >= RNAM.value.size()) break; switch(ListFieldID) { case 1: //rank RNAM.value[ListIndex]->RNAM.value = *(SINT32 *)FieldValue; break; case 2: //male RNAM.value[ListIndex]->MNAM.Copy((STRING)FieldValue); break; case 3: //female RNAM.value[ListIndex]->FNAM.Copy((STRING)FieldValue); break; case 4: //insigniaPath RNAM.value[ListIndex]->INAM.Copy((STRING)FieldValue); break; default: break; } break; case 13: //reputation WMI1.value = *(FORMID *)FieldValue; return true; default: break; } return false; }
bool ACHRRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize) { switch(FieldID) { case 1: //flags1 SetHeaderFlagMask(*(UINT32 *)FieldValue); break; case 3: //flags2 SetHeaderUnknownFlagMask(*(UINT32 *)FieldValue); break; case 4: //eid EDID.Copy((STRING)FieldValue); break; case 5: //base NAME.value = *(FORMID *)FieldValue; return true; case 6: //unknownXPCIFormID XPCI.Load(); XPCI->XPCI.value = *(FORMID *)FieldValue; return true; case 7: //unknownXPCIString XPCI.Load(); XPCI->FULL.Copy((STRING)FieldValue); break; case 8: //lod1 XLOD.Load(); XLOD->lod1 = *(FLOAT32 *)FieldValue; break; case 9: //lod2 XLOD.Load(); XLOD->lod2 = *(FLOAT32 *)FieldValue; break; case 10: //lod3 XLOD.Load(); XLOD->lod3 = *(FLOAT32 *)FieldValue; break; case 11: //parent XESP.Load(); XESP->parent = *(FORMID *)FieldValue; return true; case 12: //parentFlags SetFlagMask(*(UINT8 *)FieldValue); break; case 13: //unused1 if(ArraySize != 3) break; XESP.Load(); XESP->unused1[0] = ((UINT8ARRAY)FieldValue)[0]; XESP->unused1[1] = ((UINT8ARRAY)FieldValue)[1]; XESP->unused1[2] = ((UINT8ARRAY)FieldValue)[2]; break; case 14: //merchantContainer XMRC.value = *(FORMID *)FieldValue; return true; case 15: //horse XHRS.Load(); XHRS.value = *(FORMID *)FieldValue; return true; case 16: //xrgd_p XRGD.Copy((UINT8ARRAY)FieldValue, ArraySize); break; case 17: //scale XSCL.Load(); XSCL.value = *(FLOAT32 *)FieldValue; break; case 18: //posX DATA.value.posX = *(FLOAT32 *)FieldValue; break; case 19: //posY DATA.value.posY = *(FLOAT32 *)FieldValue; break; case 20: //posZ DATA.value.posZ = *(FLOAT32 *)FieldValue; break; case 21: //rotX DATA.value.rotX = *(FLOAT32 *)FieldValue; break; case 22: //rotY DATA.value.rotY = *(FLOAT32 *)FieldValue; break; case 23: //rotZ DATA.value.rotZ = *(FLOAT32 *)FieldValue; break; default: break; } return false; }
void CSTYRecord::DeleteField(FIELD_IDENTIFIERS) { CSTYCSTD defaultCSTD; CSTYCSAD defaultCSAD; CSTYCSSD defaultCSSD; switch(FieldID) { case 1: //flags1 SetHeaderFlagMask(0); return; case 3: //versionControl1 flagsUnk = 0; return; case 4: //eid EDID.Unload(); return; case 5: //formVersion formVersion = 0; return; case 6: //versionControl2 versionControl2[0] = 0; versionControl2[1] = 0; return; case 7: //dodgeChance CSTD.value.dodgeChance = defaultCSTD.dodgeChance; return; case 8: //lrChance CSTD.value.lrChance = defaultCSTD.lrChance; return; case 9: //unused1 CSTD.value.unused1[0] = defaultCSTD.unused1[0]; CSTD.value.unused1[1] = defaultCSTD.unused1[1]; return; case 10: //lrTimerMin CSTD.value.lrTimerMin = defaultCSTD.lrTimerMin; return; case 11: //lrTimerMax CSTD.value.lrTimerMax = defaultCSTD.lrTimerMax; return; case 12: //forTimerMin CSTD.value.forTimerMin = defaultCSTD.forTimerMin; return; case 13: //forTimerMax CSTD.value.forTimerMax = defaultCSTD.forTimerMax; return; case 14: //backTimerMin CSTD.value.backTimerMin = defaultCSTD.backTimerMin; return; case 15: //backTimerMax CSTD.value.backTimerMax = defaultCSTD.backTimerMax; return; case 16: //idleTimerMin CSTD.value.idleTimerMin = defaultCSTD.idleTimerMin; return; case 17: //idleTimerMax CSTD.value.idleTimerMax = defaultCSTD.idleTimerMax; return; case 18: //blkChance CSTD.value.blkChance = defaultCSTD.blkChance; return; case 19: //atkChance CSTD.value.atkChance = defaultCSTD.atkChance; return; case 20: //unused2 CSTD.value.unused2[0] = defaultCSTD.unused2[0]; CSTD.value.unused2[1] = defaultCSTD.unused2[1]; return; case 21: //atkBRecoil CSTD.value.atkBRecoil = defaultCSTD.atkBRecoil; return; case 22: //atkBUnc CSTD.value.atkBUnc = defaultCSTD.atkBUnc; return; case 23: //atkBh2h CSTD.value.atkBh2h = defaultCSTD.atkBh2h; return; case 24: //pAtkChance CSTD.value.pAtkChance = defaultCSTD.pAtkChance; return; case 25: //unused3 CSTD.value.unused3[0] = defaultCSTD.unused3[0]; CSTD.value.unused3[1] = defaultCSTD.unused3[1]; CSTD.value.unused3[2] = defaultCSTD.unused3[2]; return; case 26: //pAtkBRecoil CSTD.value.pAtkBRecoil = defaultCSTD.pAtkBRecoil; return; case 27: //pAtkBUnc CSTD.value.pAtkBUnc = defaultCSTD.pAtkBUnc; return; case 28: //pAtkNormal CSTD.value.pAtkNormal = defaultCSTD.pAtkNormal; return; case 29: //pAtkFor CSTD.value.pAtkFor = defaultCSTD.pAtkFor; return; case 30: //pAtkBack CSTD.value.pAtkBack = defaultCSTD.pAtkBack; return; case 31: //pAtkL CSTD.value.pAtkL = defaultCSTD.pAtkL; return; case 32: //pAtkR CSTD.value.pAtkR = defaultCSTD.pAtkR; return; case 33: //unused4 CSTD.value.unused4[0] = defaultCSTD.unused4[0]; CSTD.value.unused4[1] = defaultCSTD.unused4[1]; CSTD.value.unused4[2] = defaultCSTD.unused4[2]; return; case 34: //holdTimerMin CSTD.value.holdTimerMin = defaultCSTD.holdTimerMin; return; case 35: //holdTimerMax CSTD.value.holdTimerMax = defaultCSTD.holdTimerMax; return; case 36: //flags SetFlagMask(defaultCSTD.flags); return; case 37: //unused5 CSTD.value.unused5[0] = defaultCSTD.unused5[0]; CSTD.value.unused5[1] = defaultCSTD.unused5[1]; return; case 38: //acroDodge CSTD.value.acroDodge = defaultCSTD.acroDodge; return; case 39: //rushChance CSTD.value.rushChance = defaultCSTD.rushChance; return; case 40: //unused6 CSTD.value.unused6[0] = defaultCSTD.unused6[0]; CSTD.value.unused6[1] = defaultCSTD.unused6[1]; return; case 41: //rushMult CSTD.value.rushMult = defaultCSTD.rushMult; return; case 42: //dodgeFMult CSAD.value.dodgeFMult = defaultCSAD.dodgeFMult; return; case 43: //dodgeFBase CSAD.value.dodgeFBase = defaultCSAD.dodgeFBase; return; case 44: //encSBase CSAD.value.encSBase = defaultCSAD.encSBase; return; case 45: //encSMult CSAD.value.encSMult = defaultCSAD.encSMult; return; case 46: //dodgeAtkMult CSAD.value.dodgeAtkMult = defaultCSAD.dodgeAtkMult; return; case 47: //dodgeNAtkMult CSAD.value.dodgeNAtkMult = defaultCSAD.dodgeNAtkMult; return; case 48: //dodgeBAtkMult CSAD.value.dodgeBAtkMult = defaultCSAD.dodgeBAtkMult; return; case 49: //dodgeBNAtkMult CSAD.value.dodgeBNAtkMult = defaultCSAD.dodgeBNAtkMult; return; case 50: //dodgeFAtkMult CSAD.value.dodgeFAtkMult = defaultCSAD.dodgeFAtkMult; return; case 51: //dodgeFNAtkMult CSAD.value.dodgeFNAtkMult = defaultCSAD.dodgeFNAtkMult; return; case 52: //blockMult CSAD.value.blockMult = defaultCSAD.blockMult; return; case 53: //blockBase CSAD.value.blockBase = defaultCSAD.blockBase; return; case 54: //blockAtkMult CSAD.value.blockAtkMult = defaultCSAD.blockAtkMult; return; case 55: //blockNAtkMult CSAD.value.blockNAtkMult = defaultCSAD.blockNAtkMult; return; case 56: //atkMult CSAD.value.atkMult = defaultCSAD.atkMult; return; case 57: //atkBase CSAD.value.atkBase = defaultCSAD.atkBase; return; case 58: //atkAtkMult CSAD.value.atkAtkMult = defaultCSAD.atkAtkMult; return; case 59: //atkNAtkMult CSAD.value.atkNAtkMult = defaultCSAD.atkNAtkMult; return; case 60: //atkBlockMult CSAD.value.atkBlockMult = defaultCSAD.atkBlockMult; return; case 61: //pAtkFBase CSAD.value.pAtkFBase = defaultCSAD.pAtkFBase; return; case 62: //pAtkFMult CSAD.value.pAtkFMult = defaultCSAD.pAtkFMult; return; case 63: //coverRadius CSSD.value.coverRadius = defaultCSSD.coverRadius; return; case 64: //coverChance CSSD.value.coverChance = defaultCSSD.coverChance; return; case 65: //waitTimerMin CSSD.value.waitTimerMin = defaultCSSD.waitTimerMin; return; case 66: //waitTimerMax CSSD.value.waitTimerMax = defaultCSSD.waitTimerMax; return; case 67: //waitFireTimerMin CSSD.value.waitFireTimerMin =defaultCSSD.waitFireTimerMin; break; case 68: //waitFireTimerMax CSSD.value.waitFireTimerMax = defaultCSSD.waitFireTimerMax; break; case 69: //fireTimerMin CSSD.value.fireTimerMin = defaultCSSD.fireTimerMin; return; case 70: //fireTimerMax CSSD.value.fireTimerMax = defaultCSSD.fireTimerMax; return; case 71: //rangedRangeMultMin CSSD.value.rangedRangeMultMin = defaultCSSD.rangedRangeMultMin; return; case 72: //unused7 CSSD.value.unused1[0] = defaultCSSD.unused1[0]; CSSD.value.unused1[1] = defaultCSSD.unused1[1]; CSSD.value.unused1[2] = defaultCSSD.unused1[2]; CSSD.value.unused1[3] = defaultCSSD.unused1[3]; return; case 73: //weaponRestrictions SetType(defaultCSSD.weaponRestrictions); return; case 74: //rangedRangeMultMax CSSD.value.rangedRangeMultMax = defaultCSSD.rangedRangeMultMax; return; case 75: //targetMaxFOV CSSD.value.targetMaxFOV = defaultCSSD.targetMaxFOV; return; case 76: //combatRadius CSSD.value.combatRadius = defaultCSSD.combatRadius; return; case 77: //semiAutoFireDelayMultMin CSSD.value.semiAutoFireDelayMultMin = defaultCSSD.semiAutoFireDelayMultMin; return; case 78: //semiAutoFireDelayMultMax CSSD.value.semiAutoFireDelayMultMax = defaultCSSD.semiAutoFireDelayMultMax; return; default: return; } }
bool CSTYRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, uint32_t ArraySize) { switch(FieldID) { case 1: //flags1 SetHeaderFlagMask(*(uint32_t *)FieldValue); break; case 3: //versionControl1 if(ArraySize != 4) break; ((UINT8ARRAY)&flagsUnk)[0] = ((UINT8ARRAY)FieldValue)[0]; ((UINT8ARRAY)&flagsUnk)[1] = ((UINT8ARRAY)FieldValue)[1]; ((UINT8ARRAY)&flagsUnk)[2] = ((UINT8ARRAY)FieldValue)[2]; ((UINT8ARRAY)&flagsUnk)[3] = ((UINT8ARRAY)FieldValue)[3]; break; case 4: //eid EDID.Copy((char *)FieldValue); break; case 5: //formVersion formVersion = *(uint16_t *)FieldValue; break; case 6: //versionControl2 if(ArraySize != 2) break; versionControl2[0] = ((UINT8ARRAY)FieldValue)[0]; versionControl2[1] = ((UINT8ARRAY)FieldValue)[1]; break; case 7: //dodgeChance CSTD.value.dodgeChance = *(uint8_t *)FieldValue; break; case 8: //lrChance CSTD.value.lrChance = *(uint8_t *)FieldValue; break; case 9: //unused1 if(ArraySize != 2) break; CSTD.value.unused1[0] = ((UINT8ARRAY)FieldValue)[0]; CSTD.value.unused1[1] = ((UINT8ARRAY)FieldValue)[1]; break; case 10: //lrTimerMin CSTD.value.lrTimerMin = *(float *)FieldValue; break; case 11: //lrTimerMax CSTD.value.lrTimerMax = *(float *)FieldValue; break; case 12: //forTimerMin CSTD.value.forTimerMin = *(float *)FieldValue; break; case 13: //forTimerMax CSTD.value.forTimerMax = *(float *)FieldValue; break; case 14: //backTimerMin CSTD.value.backTimerMin = *(float *)FieldValue; break; case 15: //backTimerMax CSTD.value.backTimerMax = *(float *)FieldValue; break; case 16: //idleTimerMin CSTD.value.idleTimerMin = *(float *)FieldValue; break; case 17: //idleTimerMax CSTD.value.idleTimerMax = *(float *)FieldValue; break; case 18: //blkChance CSTD.value.blkChance = *(uint8_t *)FieldValue; break; case 19: //atkChance CSTD.value.atkChance = *(uint8_t *)FieldValue; break; case 20: //unused2 if(ArraySize != 2) break; CSTD.value.unused2[0] = ((UINT8ARRAY)FieldValue)[0]; CSTD.value.unused2[1] = ((UINT8ARRAY)FieldValue)[1]; break; case 21: //atkBRecoil CSTD.value.atkBRecoil = *(float *)FieldValue; break; case 22: //atkBUnc CSTD.value.atkBUnc = *(float *)FieldValue; break; case 23: //atkBh2h CSTD.value.atkBh2h = *(float *)FieldValue; break; case 24: //pAtkChance CSTD.value.pAtkChance = *(uint8_t *)FieldValue; break; case 25: //unused3 if(ArraySize != 3) break; CSTD.value.unused3[0] = ((UINT8ARRAY)FieldValue)[0]; CSTD.value.unused3[1] = ((UINT8ARRAY)FieldValue)[1]; CSTD.value.unused3[2] = ((UINT8ARRAY)FieldValue)[2]; break; case 26: //pAtkBRecoil CSTD.value.pAtkBRecoil = *(float *)FieldValue; break; case 27: //pAtkBUnc CSTD.value.pAtkBUnc = *(float *)FieldValue; break; case 28: //pAtkNormal CSTD.value.pAtkNormal = *(uint8_t *)FieldValue; break; case 29: //pAtkFor CSTD.value.pAtkFor = *(uint8_t *)FieldValue; break; case 30: //pAtkBack CSTD.value.pAtkBack = *(uint8_t *)FieldValue; break; case 31: //pAtkL CSTD.value.pAtkL = *(uint8_t *)FieldValue; break; case 32: //pAtkR CSTD.value.pAtkR = *(uint8_t *)FieldValue; break; case 33: //unused4 if(ArraySize != 3) break; CSTD.value.unused4[0] = ((UINT8ARRAY)FieldValue)[0]; CSTD.value.unused4[1] = ((UINT8ARRAY)FieldValue)[1]; CSTD.value.unused4[2] = ((UINT8ARRAY)FieldValue)[2]; break; case 34: //holdTimerMin CSTD.value.holdTimerMin = *(float *)FieldValue; break; case 35: //holdTimerMax CSTD.value.holdTimerMax = *(float *)FieldValue; break; case 36: //flags SetFlagMask(*(uint16_t *)FieldValue); break; case 37: //unused5 if(ArraySize != 2) break; CSTD.value.unused5[0] = ((UINT8ARRAY)FieldValue)[0]; CSTD.value.unused5[1] = ((UINT8ARRAY)FieldValue)[1]; break; case 38: //acroDodge CSTD.value.acroDodge = *(uint8_t *)FieldValue; break; case 39: //rushChance CSTD.value.rushChance = *(uint8_t *)FieldValue; break; case 40: //unused6 if(ArraySize != 2) break; CSTD.value.unused6[0] = ((UINT8ARRAY)FieldValue)[0]; CSTD.value.unused6[1] = ((UINT8ARRAY)FieldValue)[1]; break; case 41: //rushMult CSTD.value.rushMult = *(float *)FieldValue; break; case 42: //dodgeFMult CSAD.value.dodgeFMult = *(float *)FieldValue; break; case 43: //dodgeFBase CSAD.value.dodgeFBase = *(float *)FieldValue; break; case 44: //encSBase CSAD.value.encSBase = *(float *)FieldValue; break; case 45: //encSMult CSAD.value.encSMult = *(float *)FieldValue; break; case 46: //dodgeAtkMult CSAD.value.dodgeAtkMult = *(float *)FieldValue; break; case 47: //dodgeNAtkMult CSAD.value.dodgeNAtkMult = *(float *)FieldValue; break; case 48: //dodgeBAtkMult CSAD.value.dodgeBAtkMult = *(float *)FieldValue; break; case 49: //dodgeBNAtkMult CSAD.value.dodgeBNAtkMult = *(float *)FieldValue; break; case 50: //dodgeFAtkMult CSAD.value.dodgeFAtkMult = *(float *)FieldValue; break; case 51: //dodgeFNAtkMult CSAD.value.dodgeFNAtkMult = *(float *)FieldValue; break; case 52: //blockMult CSAD.value.blockMult = *(float *)FieldValue; break; case 53: //blockBase CSAD.value.blockBase = *(float *)FieldValue; break; case 54: //blockAtkMult CSAD.value.blockAtkMult = *(float *)FieldValue; break; case 55: //blockNAtkMult CSAD.value.blockNAtkMult = *(float *)FieldValue; break; case 56: //atkMult CSAD.value.atkMult = *(float *)FieldValue; break; case 57: //atkBase CSAD.value.atkBase = *(float *)FieldValue; break; case 58: //atkAtkMult CSAD.value.atkAtkMult = *(float *)FieldValue; break; case 59: //atkNAtkMult CSAD.value.atkNAtkMult = *(float *)FieldValue; break; case 60: //atkBlockMult CSAD.value.atkBlockMult = *(float *)FieldValue; break; case 61: //pAtkFBase CSAD.value.pAtkFBase = *(float *)FieldValue; break; case 62: //pAtkFMult CSAD.value.pAtkFMult = *(float *)FieldValue; break; case 63: //coverRadius CSSD.value.coverRadius = *(float *)FieldValue; break; case 64: //coverChance CSSD.value.coverChance = *(float *)FieldValue; break; case 65: //waitTimerMin CSSD.value.waitTimerMin = *(float *)FieldValue; break; case 66: //waitTimerMax CSSD.value.waitTimerMax = *(float *)FieldValue; break; case 67: //waitFireTimerMin CSSD.value.waitFireTimerMin = *(float *)FieldValue; break; case 68: //waitFireTimerMax CSSD.value.waitFireTimerMax = *(float *)FieldValue; break; case 69: //fireTimerMin CSSD.value.fireTimerMin = *(float *)FieldValue; break; case 70: //fireTimerMax CSSD.value.fireTimerMax = *(float *)FieldValue; break; case 71: //rangedRangeMultMin CSSD.value.rangedRangeMultMin = *(float *)FieldValue; break; case 72: //unused7 if(ArraySize != 4) break; CSSD.value.unused1[0] = ((UINT8ARRAY)FieldValue)[0]; CSSD.value.unused1[1] = ((UINT8ARRAY)FieldValue)[1]; CSSD.value.unused1[2] = ((UINT8ARRAY)FieldValue)[2]; CSSD.value.unused1[3] = ((UINT8ARRAY)FieldValue)[3]; break; case 73: //weaponRestrictions SetType(*(uint32_t *)FieldValue); break; case 74: //rangedRangeMultMax CSSD.value.rangedRangeMultMax = *(float *)FieldValue; break; case 75: //targetMaxFOV CSSD.value.targetMaxFOV = *(float *)FieldValue; break; case 76: //combatRadius CSSD.value.combatRadius = *(float *)FieldValue; break; case 77: //semiAutoFireDelayMultMin CSSD.value.semiAutoFireDelayMultMin = *(float *)FieldValue; break; case 78: //semiAutoFireDelayMultMax CSSD.value.semiAutoFireDelayMultMax = *(float *)FieldValue; break; default: break; } return false; }
bool LVLIRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize) { switch(FieldID) { case 1: //flags1 SetHeaderFlagMask(*(UINT32 *)FieldValue); break; case 3: //flags2 SetHeaderUnknownFlagMask(*(UINT32 *)FieldValue); break; case 4: //eid EDID.Copy((STRING)FieldValue); break; case 5: //chanceNone LVLD.value = *(UINT8 *)FieldValue; if((LVLD.value & fAltCalcFromAllLevels) != 0) { LVLD.value &= ~fAltCalcFromAllLevels; IsCalcFromAllLevels(true); } break; case 6: //flags SetFlagMask(*(UINT8 *)FieldValue); break; case 9: //entries if(ListFieldID == 0) //entriesSize { Entries.resize(ArraySize); return false; } if(ListIndex >= Entries.value.size()) break; switch(ListFieldID) { case 1: //level Entries.value[ListIndex]->level = *(SINT16 *)FieldValue; break; case 2: //unused1 if(ArraySize != 2) break; Entries.value[ListIndex]->unused1[0] = ((UINT8ARRAY)FieldValue)[0]; Entries.value[ListIndex]->unused1[1] = ((UINT8ARRAY)FieldValue)[1]; break; case 3: //listId Entries.value[ListIndex]->listId = *(FORMID *)FieldValue; return true; case 4: //count Entries.value[ListIndex]->count = *(SINT16 *)FieldValue; break; case 5: //unused2 if(ArraySize != 2) break; Entries.value[ListIndex]->unused2[0] = ((UINT8ARRAY)FieldValue)[0]; Entries.value[ListIndex]->unused2[1] = ((UINT8ARRAY)FieldValue)[1]; break; default: break; } break; default: break; } return false; }
bool TXSTRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, uint32_t ArraySize) { switch(FieldID) { case 1: //flags1 SetHeaderFlagMask(*(uint32_t *)FieldValue); break; case 3: //versionControl1 if(ArraySize != 4) break; ((UINT8ARRAY)&flagsUnk)[0] = ((UINT8ARRAY)FieldValue)[0]; ((UINT8ARRAY)&flagsUnk)[1] = ((UINT8ARRAY)FieldValue)[1]; ((UINT8ARRAY)&flagsUnk)[2] = ((UINT8ARRAY)FieldValue)[2]; ((UINT8ARRAY)&flagsUnk)[3] = ((UINT8ARRAY)FieldValue)[3]; break; case 4: //eid EDID.Copy((char *)FieldValue); break; case 5: //formVersion formVersion = *(uint16_t *)FieldValue; break; case 6: //versionControl2 if(ArraySize != 2) break; versionControl2[0] = ((UINT8ARRAY)FieldValue)[0]; versionControl2[1] = ((UINT8ARRAY)FieldValue)[1]; break; case 7: //boundX1 OBND.value.x1 = *(int16_t *)FieldValue; break; case 8: //boundY1 OBND.value.y1 = *(int16_t *)FieldValue; break; case 9: //boundZ1 OBND.value.z1 = *(int16_t *)FieldValue; break; case 10: //boundX2 OBND.value.x2 = *(int16_t *)FieldValue; break; case 11: //boundY2 OBND.value.y2 = *(int16_t *)FieldValue; break; case 12: //boundZ2 OBND.value.z2 = *(int16_t *)FieldValue; break; case 13: //baseImageOrTransparency TX00.Copy((char *)FieldValue); break; case 14: //normalMapOrSpecular TX01.Copy((char *)FieldValue); break; case 15: //envMapMaskOrUnk TX02.Copy((char *)FieldValue); break; case 16: //glowMapOrUnused TX03.Copy((char *)FieldValue); break; case 17: //parallaxMapOrUnused TX04.Copy((char *)FieldValue); break; case 18: //envMapOrUnused TX05.Copy((char *)FieldValue); break; case 19: //decalMinWidth DODT.Load(); DODT->minWidth = *(float *)FieldValue; break; case 20: //decalMaxWidth DODT.Load(); DODT->maxWidth = *(float *)FieldValue; break; case 21: //decalMinHeight DODT.Load(); DODT->minHeight = *(float *)FieldValue; break; case 22: //decalMaxHeight DODT.Load(); DODT->maxHeight = *(float *)FieldValue; break; case 23: //decalDepth DODT.Load(); DODT->depth = *(float *)FieldValue; break; case 24: //decalShininess DODT.Load(); DODT->shininess = *(float *)FieldValue; break; case 25: //decalScale DODT.Load(); DODT->scale = *(float *)FieldValue; break; case 26: //decalPasses DODT.Load(); DODT->passes = *(uint8_t *)FieldValue; break; case 27: //decalFlags DODT.Load(); DODT->flags = *(uint8_t *)FieldValue; break; case 28: //decalUnused1 if(ArraySize != 2) break; DODT.Load(); DODT->unused1[0] = ((UINT8ARRAY)FieldValue)[0]; DODT->unused1[1] = ((UINT8ARRAY)FieldValue)[1]; break; case 29: //decalRed DODT.Load(); DODT->red = *(uint8_t *)FieldValue; break; case 30: //decalGreen DODT.Load(); DODT->green = *(uint8_t *)FieldValue; break; case 31: //decalBlue DODT.Load(); DODT->blue = *(uint8_t *)FieldValue; break; case 32: //decalUnused2 if(ArraySize != 1) break; DODT.Load(); DODT->unused2 = ((UINT8ARRAY)FieldValue)[0]; break; case 33: //flags SetFlagMask(*(uint16_t *)FieldValue); break; default: break; } return false; }
bool IDLMRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, uint32_t ArraySize) { switch(FieldID) { case 1: //flags1 SetHeaderFlagMask(*(uint32_t *)FieldValue); break; case 3: //versionControl1 if(ArraySize != 4) break; ((UINT8ARRAY)&flagsUnk)[0] = ((UINT8ARRAY)FieldValue)[0]; ((UINT8ARRAY)&flagsUnk)[1] = ((UINT8ARRAY)FieldValue)[1]; ((UINT8ARRAY)&flagsUnk)[2] = ((UINT8ARRAY)FieldValue)[2]; ((UINT8ARRAY)&flagsUnk)[3] = ((UINT8ARRAY)FieldValue)[3]; break; case 4: //eid EDID.Copy((char *)FieldValue); break; case 5: //formVersion formVersion = *(uint16_t *)FieldValue; break; case 6: //versionControl2 if(ArraySize != 2) break; versionControl2[0] = ((UINT8ARRAY)FieldValue)[0]; versionControl2[1] = ((UINT8ARRAY)FieldValue)[1]; break; case 7: //boundX1 OBND.value.x1 = *(int16_t *)FieldValue; break; case 8: //boundY1 OBND.value.y1 = *(int16_t *)FieldValue; break; case 9: //boundZ1 OBND.value.z1 = *(int16_t *)FieldValue; break; case 10: //boundX2 OBND.value.x2 = *(int16_t *)FieldValue; break; case 11: //boundY2 OBND.value.y2 = *(int16_t *)FieldValue; break; case 12: //boundZ2 OBND.value.z2 = *(int16_t *)FieldValue; break; case 13: //flags SetFlagMask(*(uint8_t *)FieldValue); break; case 14: //count IDLC.value = *(uint8_t *)FieldValue; break; case 15: //timer IDLT.value = *(float *)FieldValue; break; case 16: //animations IDLA.resize(ArraySize); for(uint32_t x = 0; x < ArraySize; x++) IDLA.value[x] = ((FORMIDARRAY)FieldValue)[x]; return true; default: break; } return false; }
void EXPLRecord::DeleteField(FIELD_IDENTIFIERS) { GENOBND defaultOBND; FNVMODS defaultMODS; EXPLDATA defaultDATA; switch(FieldID) { case 1: //flags1 SetHeaderFlagMask(0); return; case 3: //versionControl1 flagsUnk = 0; return; case 4: //eid EDID.Unload(); return; case 5: //formVersion formVersion = 0; return; case 6: //versionControl2 versionControl2[0] = 0; versionControl2[1] = 0; return; case 7: //boundX1 OBND.value.x1 = defaultOBND.x1; return; case 8: //boundY1 OBND.value.y1 = defaultOBND.y1; return; case 9: //boundZ1 OBND.value.z1 = defaultOBND.z1; return; case 10: //boundX2 OBND.value.x2 = defaultOBND.x2; return; case 11: //boundY2 OBND.value.y2 = defaultOBND.y2; return; case 12: //boundZ2 OBND.value.z2 = defaultOBND.z2; return; case 13: //full FULL.Unload(); return; case 14: //modPath if(MODL.IsLoaded()) MODL->MODL.Unload(); return; case 15: //modb if(MODL.IsLoaded()) MODL->MODB.Unload(); return; case 16: //modt_p if(MODL.IsLoaded()) MODL->MODT.Unload(); return; case 17: //altTextures if(MODL.IsLoaded()) { if(ListFieldID == 0) //altTextures { MODL->Textures.Unload(); return; } if(ListIndex >= MODL->Textures.MODS.size()) return; switch(ListFieldID) { case 1: //name delete []MODL->Textures.MODS[ListIndex]->name; MODL->Textures.MODS[ListIndex]->name = NULL; return; case 2: //texture MODL->Textures.MODS[ListIndex]->texture = defaultMODS.texture; return; case 3: //index MODL->Textures.MODS[ListIndex]->index = defaultMODS.index; return; default: return; } } return; case 18: //modelFlags if(MODL.IsLoaded()) MODL->MODD.Unload(); return; case 19: //effect EITM.Unload(); return; case 20: //imageSpace MNAM.Unload(); return; case 21: //force DATA.value.force = defaultDATA.force; return; case 22: //damage DATA.value.damage = defaultDATA.damage; return; case 23: //radius DATA.value.radius = defaultDATA.radius; return; case 24: //light DATA.value.light = defaultDATA.light; return; case 25: //sound1 DATA.value.sound1 = defaultDATA.sound1; return; case 26: //flags SetFlagMask(defaultDATA.flags); return; case 27: //ISRadius DATA.value.ISRadius = defaultDATA.ISRadius; return; case 28: //impactDataSet DATA.value.impactDataSet = defaultDATA.impactDataSet; return; case 29: //sound2 DATA.value.sound2 = defaultDATA.sound2; return; case 30: //radLevel DATA.value.radLevel = defaultDATA.radLevel; return; case 31: //radTime DATA.value.radTime = defaultDATA.radTime; return; case 32: //radRadius DATA.value.radRadius = defaultDATA.radRadius; return; case 33: //soundLevel DATA.value.soundLevel = defaultDATA.soundLevel; return; case 34: //impact INAM.Unload(); return; default: return; } }
bool FACTRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize) { switch(FieldID) { case 1: //flags1 SetHeaderFlagMask(*(UINT32 *)FieldValue); break; case 3: //flags2 SetHeaderUnknownFlagMask(*(UINT32 *)FieldValue); break; case 4: //eid EDID.Copy((STRING)FieldValue); break; case 5: //full FULL.Copy((STRING)FieldValue); break; case 6: //relations if(ListFieldID == 0) //relationsSize { XNAM.resize(ArraySize); return false; } if(ListIndex >= XNAM.value.size()) break; switch(ListFieldID) { case 1: //faction XNAM.value[ListIndex]->faction = *(FORMID *)FieldValue; return true; case 2: //mod XNAM.value[ListIndex]->mod = *(SINT32 *)FieldValue; break; default: break; } break; case 7: //flags SetFlagMask(*(UINT8 *)FieldValue); break; case 8: //crimeGoldMultiplier CNAM.Load(); *CNAM.value = *(FLOAT32 *)FieldValue; break; case 9: //ranks if(ListFieldID == 0) //ranksSize { RNAM.resize(ArraySize); return false; } if(ListIndex >= RNAM.value.size()) break; switch(ListFieldID) { case 1: //rank RNAM.value[ListIndex]->RNAM.value = *(SINT32 *)FieldValue; break; case 2: //male RNAM.value[ListIndex]->MNAM.Copy((STRING)FieldValue); break; case 3: //female RNAM.value[ListIndex]->FNAM.Copy((STRING)FieldValue); break; case 4: //insigniaPath RNAM.value[ListIndex]->INAM.Copy((STRING)FieldValue); break; default: break; } break; default: break; } return false; }
bool WATRRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize) { switch(FieldID) { case 1: //flags1 SetHeaderFlagMask(*(UINT32 *)FieldValue); break; case 3: //flags2 SetHeaderUnknownFlagMask(*(UINT32 *)FieldValue); break; case 4: //eid EDID.Copy((STRING)FieldValue); break; case 5: //texturePath TNAM.Copy((STRING)FieldValue); break; case 6: //opacity ANAM.value = *(UINT8 *)FieldValue; break; case 7: //flags SetFlagMask(*(UINT8 *)FieldValue); break; case 8: //materialPath MNAM.Copy((STRING)FieldValue); break; case 9: //sound SNAM.value = *(FORMID *)FieldValue; return true; case 10: //windVelocity DATA.Load(); DATA->windVelocity = *(FLOAT32 *)FieldValue; break; case 11: //windDirection DATA.Load(); DATA->windDirection = *(FLOAT32 *)FieldValue; break; case 12: //waveAmp DATA.Load(); DATA->waveAmp = *(FLOAT32 *)FieldValue; break; case 13: //waveFreq DATA.Load(); DATA->waveFreq = *(FLOAT32 *)FieldValue; break; case 14: //sunPower DATA.Load(); DATA->sunPower = *(FLOAT32 *)FieldValue; break; case 15: //reflectAmt DATA.Load(); DATA->reflectAmt = *(FLOAT32 *)FieldValue; break; case 16: //fresnelAmt DATA.Load(); DATA->fresnelAmt = *(FLOAT32 *)FieldValue; break; case 17: //xSpeed DATA.Load(); DATA->xSpeed = *(FLOAT32 *)FieldValue; break; case 18: //ySpeed DATA.Load(); DATA->ySpeed = *(FLOAT32 *)FieldValue; break; case 19: //fogNear DATA.Load(); DATA->fogNear = *(FLOAT32 *)FieldValue; break; case 20: //fogFar DATA.Load(); DATA->fogFar = *(FLOAT32 *)FieldValue; break; case 21: //shallowRed DATA.Load(); DATA->shallow.red = *(UINT8 *)FieldValue; break; case 22: //shallowGreen DATA.Load(); DATA->shallow.green = *(UINT8 *)FieldValue; break; case 23: //shallowBlue DATA.Load(); DATA->shallow.blue = *(UINT8 *)FieldValue; break; case 24: //unused1 if(ArraySize != 1) break; DATA.Load(); DATA->shallow.unused1 = ((UINT8ARRAY)FieldValue)[0]; break; case 25: //deepRed DATA.Load(); DATA->deep.red = *(UINT8 *)FieldValue; break; case 26: //deepGreen DATA.Load(); DATA->deep.green = *(UINT8 *)FieldValue; break; case 27: //deepBlue DATA.Load(); DATA->deep.blue = *(UINT8 *)FieldValue; break; case 28: //unused2 if(ArraySize != 1) break; DATA.Load(); DATA->deep.unused1 = ((UINT8ARRAY)FieldValue)[0]; break; case 29: //reflRed DATA.Load(); DATA->refl.red = *(UINT8 *)FieldValue; break; case 30: //reflGreen DATA.Load(); DATA->refl.green = *(UINT8 *)FieldValue; break; case 31: //reflBlue DATA.Load(); DATA->refl.blue = *(UINT8 *)FieldValue; break; case 32: //unused3 if(ArraySize != 1) break; DATA.Load(); DATA->refl.unused1 = ((UINT8ARRAY)FieldValue)[0]; break; case 33: //blend DATA.Load(); DATA->blend = *(UINT8 *)FieldValue; break; case 34: //unused4 if(ArraySize != 3) break; DATA.Load(); DATA->unused1[0] = ((UINT8ARRAY)FieldValue)[0]; DATA->unused1[1] = ((UINT8ARRAY)FieldValue)[1]; DATA->unused1[2] = ((UINT8ARRAY)FieldValue)[2]; break; case 35: //rainForce DATA.Load(); DATA->rainForce = *(FLOAT32 *)FieldValue; break; case 36: //rainVelocity DATA.Load(); DATA->rainVelocity = *(FLOAT32 *)FieldValue; break; case 37: //rainFalloff DATA.Load(); DATA->rainFalloff = *(FLOAT32 *)FieldValue; break; case 38: //rainDampner DATA.Load(); DATA->rainDampner = *(FLOAT32 *)FieldValue; break; case 39: //rainSize DATA.Load(); DATA->rainSize = *(FLOAT32 *)FieldValue; break; case 40: //dispForce DATA.Load(); DATA->dispForce = *(FLOAT32 *)FieldValue; break; case 41: //dispVelocity DATA.Load(); DATA->dispVelocity = *(FLOAT32 *)FieldValue; break; case 42: //dispFalloff DATA.Load(); DATA->dispFalloff = *(FLOAT32 *)FieldValue; break; case 43: //dispDampner DATA.Load(); DATA->dispDampner = *(FLOAT32 *)FieldValue; break; case 44: //dispSize DATA.Load(); DATA->dispSize = *(FLOAT32 *)FieldValue; break; case 45: //damage DATA.Load(); DATA->damage = *(UINT16 *)FieldValue; break; case 46: //dayWater GNAM.Load(); GNAM->dayWater = *(FORMID *)FieldValue; return true; case 47: //nightWater GNAM.Load(); GNAM->nightWater = *(FORMID *)FieldValue; return true; case 48: //underWater GNAM.Load(); GNAM->underWater = *(FORMID *)FieldValue; return true; default: break; } return false; }
bool BOOKRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, uint32_t ArraySize) { switch(FieldID) { case 1: //flags1 SetHeaderFlagMask(*(uint32_t *)FieldValue); break; case 3: //flags2 SetHeaderUnknownFlagMask(*(uint32_t *)FieldValue); break; case 4: //eid EDID.Copy((char *)FieldValue); break; case 5: //full FULL.Copy((char *)FieldValue); break; case 6: //modPath MODL.Load(); MODL->MODL.Copy((char *)FieldValue); break; case 7: //modb MODL.Load(); MODL->MODB.value = *(float *)FieldValue; break; case 8: //modt_p MODL.Load(); MODL->MODT.Load(); MODL->MODT.Copy((UINT8ARRAY)FieldValue, ArraySize); break; case 9: //iconPath ICON.Copy((char *)FieldValue); break; case 10: //text DESC.Copy((char *)FieldValue); break; case 11: //script SCRI.value = *(FORMID *)FieldValue; return true; case 12: //enchantment ENAM.value = *(FORMID *)FieldValue; return true; case 13: //enchantPoints ANAM.value = *(uint16_t *)FieldValue; break; case 14: //flags SetFlagMask(*(uint8_t *)FieldValue); break; case 15: //teaches DATA.value.teaches = *(int8_t *)FieldValue; break; case 16: //value DATA.value.value = *(uint32_t *)FieldValue; break; case 17: //weight DATA.value.weight = *(float *)FieldValue; break; default: break; } return false; }
bool COLLRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, uint32_t ArraySize) { switch(FieldID) { case 1: //flags1 SetHeaderFlagMask(*(uint32_t *)FieldValue); break; case 3: //versionControl1 if(ArraySize != 4) break; ((UINT8ARRAY)&flagsUnk)[0] = ((UINT8ARRAY)FieldValue)[0]; ((UINT8ARRAY)&flagsUnk)[1] = ((UINT8ARRAY)FieldValue)[1]; ((UINT8ARRAY)&flagsUnk)[2] = ((UINT8ARRAY)FieldValue)[2]; ((UINT8ARRAY)&flagsUnk)[3] = ((UINT8ARRAY)FieldValue)[3]; break; case 4: //eid EDID.Copy((char *)FieldValue); break; case 5: //formVersion formVersion = *(uint16_t *)FieldValue; break; case 6: //versionControl2 if(ArraySize != 2) break; versionControl2[0] = ((UINT8ARRAY)FieldValue)[0]; versionControl2[1] = ((UINT8ARRAY)FieldValue)[1]; break; case 7: //description DESC.Copy((char *)FieldValue); break; case 8: //id BNAM.value = *(uint32_t *)FieldValue; break; case 9: //debugColor.red FNAM->red = *(uint8_t *)FieldValue; break; case 10: //debugColor.green FNAM->green = *(uint8_t *)FieldValue; break; case 11: //debucColor.blue FNAM->blue = *(uint8_t *)FieldValue; break; case 12: //debugColor.unkown FNAM->unk1 = *(uint8_t *)FieldValue; break; case 13: //flags SetFlagMask(*(uint32_t *)FieldValue); break; case 14: //name MNAM.Copy((char *)FieldValue); break; case 15: //collidesWith CNAM.value.resize(ArraySize); for (uint32_t i = 0; i < ArraySize; ++i) CNAM.value[i] = ((FORMIDARRAY)FieldValue)[i]; return true; default: break; } return false; }
bool ALCHRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize) { switch(FieldID) { case 1: //flags1 SetHeaderFlagMask(*(UINT32 *)FieldValue); break; case 3: //versionControl1 if(ArraySize != 4) break; ((UINT8ARRAY)&flagsUnk)[0] = ((UINT8ARRAY)FieldValue)[0]; ((UINT8ARRAY)&flagsUnk)[1] = ((UINT8ARRAY)FieldValue)[1]; ((UINT8ARRAY)&flagsUnk)[2] = ((UINT8ARRAY)FieldValue)[2]; ((UINT8ARRAY)&flagsUnk)[3] = ((UINT8ARRAY)FieldValue)[3]; break; case 4: //eid EDID.Copy((STRING)FieldValue); break; case 5: //formVersion formVersion = *(UINT16 *)FieldValue; break; case 6: //versionControl2 if(ArraySize != 2) break; versionControl2[0] = ((UINT8ARRAY)FieldValue)[0]; versionControl2[1] = ((UINT8ARRAY)FieldValue)[1]; break; case 7: //boundX1 OBND.value.x1 = *(SINT16 *)FieldValue; break; case 8: //boundY1 OBND.value.y1 = *(SINT16 *)FieldValue; break; case 9: //boundZ1 OBND.value.z1 = *(SINT16 *)FieldValue; break; case 10: //boundX2 OBND.value.x2 = *(SINT16 *)FieldValue; break; case 11: //boundY2 OBND.value.y2 = *(SINT16 *)FieldValue; break; case 12: //boundZ2 OBND.value.z2 = *(SINT16 *)FieldValue; break; case 13: //full FULL.Copy((STRING)FieldValue); break; case 14: //modPath MODL.Load(); MODL->MODL.Copy((STRING)FieldValue); break; case 15: //modb MODL.Load(); MODL->MODB.value = *(FLOAT32 *)FieldValue; break; case 16: //modt_p MODL.Load(); MODL->MODT.Copy((UINT8ARRAY)FieldValue, ArraySize); break; case 17: //altTextures MODL.Load(); if(ListFieldID == 0) //altTexturesSize { MODL->Textures.resize(ArraySize); return false; } if(ListIndex >= MODL->Textures.MODS.size()) break; switch(ListFieldID) { case 1: //name delete []MODL->Textures.MODS[ListIndex]->name; MODL->Textures.MODS[ListIndex]->name = NULL; if(FieldValue != NULL) { ArraySize = (UINT32)strlen((STRING)FieldValue) + 1; MODL->Textures.MODS[ListIndex]->name = new char[ArraySize]; strcpy_s(MODL->Textures.MODS[ListIndex]->name, ArraySize, (STRING)FieldValue); } break; case 2: //texture MODL->Textures.MODS[ListIndex]->texture = *(FORMID *)FieldValue; return true; case 3: //index MODL->Textures.MODS[ListIndex]->index = *(SINT32 *)FieldValue; break; default: break; } break; case 18: //modelFlags MODL.Load(); MODL->SetFlagMask(*(UINT8 *)FieldValue); break; case 19: //iconPath ICON.Copy((STRING)FieldValue); break; case 20: //smallIconPath MICO.Copy((STRING)FieldValue); break; case 21: //script SCRI.value = *(FORMID *)FieldValue; return true; case 22: //equipmentType SetEquipmentType(*(SINT32 *)FieldValue); break; case 23: //weight DATA.value = *(FLOAT32 *)FieldValue; break; case 24: //value ENIT.value.value = *(SINT32 *)FieldValue; break; case 25: //flags SetFlagMask(*(UINT8 *)FieldValue); break; case 26: //unused1 if(ArraySize != 3) break; ENIT.value.unused1[0] = ((UINT8ARRAY)FieldValue)[0]; ENIT.value.unused1[1] = ((UINT8ARRAY)FieldValue)[1]; ENIT.value.unused1[2] = ((UINT8ARRAY)FieldValue)[2]; break; case 27: //withdrawalEffect ENIT.value.withdrawalEffect = *(FORMID *)FieldValue; return true; case 28: //addictionChance ENIT.value.addictionChance = *(FLOAT32 *)FieldValue; break; case 29: //consumeSound ENIT.value.consumeSound = *(FORMID *)FieldValue; return true; case 30: //effects if(ListFieldID == 0) //effectsSize { Effects.resize(ArraySize); return false; } if(ListIndex >= Effects.value.size()) break; switch(ListFieldID) { case 1: //effect Effects.value[ListIndex]->EFID.value = *(FORMID *)FieldValue; return true; case 2: //magnitude Effects.value[ListIndex]->EFIT.value.magnitude = *(UINT32 *)FieldValue; break; case 3: //area Effects.value[ListIndex]->EFIT.value.area = *(UINT32 *)FieldValue; break; case 4: //duration Effects.value[ListIndex]->EFIT.value.duration = *(UINT32 *)FieldValue; break; case 5: //rangeType Effects.value[ListIndex]->SetRange(*(UINT32 *)FieldValue); break; case 6: //actorValue Effects.value[ListIndex]->EFIT.value.actorValue = *(SINT32 *)FieldValue; break; case 7: //conditions if(ListX2FieldID == 0) //conditionsSize { Effects.value[ListIndex]->CTDA.resize(ArraySize); return false; } if(ListX2Index >= Effects.value[ListIndex]->CTDA.value.size()) break; switch(ListX2FieldID) { case 1: //operType Effects.value[ListIndex]->CTDA.value[ListX2Index]->operType = *(UINT8 *)FieldValue; break; case 2: //unused1 if(ArraySize != 3) break; Effects.value[ListIndex]->CTDA.value[ListX2Index]->unused1[0] = ((UINT8ARRAY)FieldValue)[0]; Effects.value[ListIndex]->CTDA.value[ListX2Index]->unused1[1] = ((UINT8ARRAY)FieldValue)[1]; Effects.value[ListIndex]->CTDA.value[ListX2Index]->unused1[2] = ((UINT8ARRAY)FieldValue)[2]; break; case 3: //compValue Effects.value[ListIndex]->CTDA.value[ListX2Index]->compValue = *(FORMID_OR_FLOAT32 *)FieldValue; return true; case 4: //ifunc Effects.value[ListIndex]->CTDA.value[ListX2Index]->ifunc = *(UINT32 *)FieldValue; return true; case 5: //param1 Effects.value[ListIndex]->CTDA.value[ListX2Index]->param1 = *(FORMID_OR_UINT32 *)FieldValue; return true; case 6: //param2 Effects.value[ListIndex]->CTDA.value[ListX2Index]->param2 = *(FORMID_OR_UINT32 *)FieldValue; return true; case 7: //runOnType Effects.value[ListIndex]->CTDA.value[ListX2Index]->runOnType = *(UINT32 *)FieldValue; return true; case 8: //reference Effects.value[ListIndex]->CTDA.value[ListX2Index]->reference = *(FORMID_OR_UINT32 *)FieldValue; return true; default: break; } break; default: break; } break; case 31: //destructableHealth Destructable.Load(); Destructable->DEST.value.health = *(SINT32 *)FieldValue; break; case 32: //destructableCount Destructable.Load(); Destructable->DEST.value.count = *(UINT8 *)FieldValue; break; case 33: //destructableFlags Destructable.Load(); Destructable->SetFlagMask(*(UINT8 *)FieldValue); break; case 34: //destructableUnused1 if(ArraySize != 2) break; Destructable.Load(); Destructable->DEST.value.unused1[0] = ((UINT8ARRAY)FieldValue)[0]; Destructable->DEST.value.unused1[1] = ((UINT8ARRAY)FieldValue)[1]; break; case 35: //destructableStages Destructable.Load(); if(ListFieldID == 0) //destructableStagesSize { Destructable->Stages.resize(ArraySize); return false; } if(ListIndex >= Destructable->Stages.value.size()) break; switch(ListFieldID) { case 1: //health Destructable->Stages.value[ListIndex]->DSTD.value.health = *(UINT8 *)FieldValue; break; case 2: //index Destructable->Stages.value[ListIndex]->DSTD.value.index = *(UINT8 *)FieldValue; break; case 3: //stage Destructable->Stages.value[ListIndex]->DSTD.value.stage = *(UINT8 *)FieldValue; break; case 4: //flags Destructable->Stages.value[ListIndex]->SetFlagMask(*(UINT8 *)FieldValue); break; case 5: //dps Destructable->Stages.value[ListIndex]->DSTD.value.dps = *(SINT32 *)FieldValue; break; case 6: //explosion Destructable->Stages.value[ListIndex]->DSTD.value.explosion = *(FORMID *)FieldValue; return true; case 7: //debris Destructable->Stages.value[ListIndex]->DSTD.value.debris = *(FORMID *)FieldValue; return true; case 8: //debrisCount Destructable->Stages.value[ListIndex]->DSTD.value.debrisCount = *(SINT32 *)FieldValue; break; case 9: //modPath Destructable->Stages.value[ListIndex]->DMDL.Copy((STRING)FieldValue); break; case 10: //modt_p Destructable->Stages.value[ListIndex]->DMDT.Copy((UINT8ARRAY)FieldValue, ArraySize); break; default: break; } break; case 36: //pickupSound YNAM.value = *(FORMID *)FieldValue; return true; case 37: //dropSound ZNAM.value = *(FORMID *)FieldValue; return true; default: break; } return false; }
void PMISRecord::DeleteField(FIELD_IDENTIFIERS) { FNVSCHR defaultSCHR; GENVARS defaultVARS; GENSCR_ defaultSCR_; GENCLR defaultCLR; GENXDCR defaultXDCR; GENXAPR defaultXAPR; GENXESP defaultXESP; GENPOSDATA defaultDATA; GENXPWR defaultXPWR; switch(FieldID) { case 1: //flags1 SetHeaderFlagMask(0); return; case 3: //versionControl1 flagsUnk = 0; return; case 4: //eid EDID.Unload(); return; case 5: //formVersion formVersion = 0; return; case 6: //versionControl2 versionControl2[0] = 0; versionControl2[1] = 0; return; case 7: //base NAME.Unload(); return; case 8: //encounterZone XEZN.Unload(); return; case 9: //xrgd_p XRGD.Unload(); return; case 10: //xrgb_p XRGB.Unload(); return; case 11: //idleTime if(Patrol.IsLoaded()) Patrol->XPRD.Unload(); return; case 12: //idle if(Patrol.IsLoaded()) Patrol->INAM.Unload(); return; case 13: //unused1 if(Patrol.IsLoaded()) { Patrol->SCHR.value.unused1[0] = defaultSCHR.unused1[0]; Patrol->SCHR.value.unused1[1] = defaultSCHR.unused1[1]; Patrol->SCHR.value.unused1[2] = defaultSCHR.unused1[2]; Patrol->SCHR.value.unused1[3] = defaultSCHR.unused1[3]; } return; case 14: //numRefs if(Patrol.IsLoaded()) Patrol->SCHR.value.numRefs = defaultSCHR.numRefs; return; case 15: //compiledSize if(Patrol.IsLoaded()) Patrol->SCHR.value.compiledSize = defaultSCHR.compiledSize; return; case 16: //lastIndex if(Patrol.IsLoaded()) Patrol->SCHR.value.lastIndex = defaultSCHR.lastIndex; return; case 17: //scriptType if(Patrol.IsLoaded()) Patrol->SetType(defaultSCHR.scriptType); return; case 18: //scriptFlags if(Patrol.IsLoaded()) Patrol->SetScriptFlagMask(defaultSCHR.flags); return; case 19: //compiled_p if(Patrol.IsLoaded()) Patrol->SCDA.Unload(); return; case 20: //scriptText if(Patrol.IsLoaded()) Patrol->SCTX.Unload(); return; case 21: //vars if(!Patrol.IsLoaded()) return; if(ListFieldID == 0) //varsSize { Patrol->VARS.Unload(); return; } if(ListIndex >= Patrol->VARS.value.size()) return; switch(ListFieldID) { case 1: //index Patrol->VARS.value[ListIndex]->SLSD.value.index = defaultVARS.SLSD.value.index; return; case 2: //unused1 Patrol->VARS.value[ListIndex]->SLSD.value.unused1[0] = defaultVARS.SLSD.value.unused1[0]; Patrol->VARS.value[ListIndex]->SLSD.value.unused1[1] = defaultVARS.SLSD.value.unused1[1]; Patrol->VARS.value[ListIndex]->SLSD.value.unused1[2] = defaultVARS.SLSD.value.unused1[2]; Patrol->VARS.value[ListIndex]->SLSD.value.unused1[3] = defaultVARS.SLSD.value.unused1[3]; Patrol->VARS.value[ListIndex]->SLSD.value.unused1[4] = defaultVARS.SLSD.value.unused1[4]; Patrol->VARS.value[ListIndex]->SLSD.value.unused1[5] = defaultVARS.SLSD.value.unused1[5]; Patrol->VARS.value[ListIndex]->SLSD.value.unused1[6] = defaultVARS.SLSD.value.unused1[6]; Patrol->VARS.value[ListIndex]->SLSD.value.unused1[7] = defaultVARS.SLSD.value.unused1[7]; Patrol->VARS.value[ListIndex]->SLSD.value.unused1[8] = defaultVARS.SLSD.value.unused1[8]; Patrol->VARS.value[ListIndex]->SLSD.value.unused1[9] = defaultVARS.SLSD.value.unused1[9]; Patrol->VARS.value[ListIndex]->SLSD.value.unused1[10] = defaultVARS.SLSD.value.unused1[10]; Patrol->VARS.value[ListIndex]->SLSD.value.unused1[11] = defaultVARS.SLSD.value.unused1[11]; return; case 3: //flags Patrol->VARS.value[ListIndex]->SetFlagMask(defaultVARS.SLSD.value.flags); return; case 4: //unused2 Patrol->VARS.value[ListIndex]->SLSD.value.unused2[0] = defaultVARS.SLSD.value.unused2[0]; Patrol->VARS.value[ListIndex]->SLSD.value.unused2[1] = defaultVARS.SLSD.value.unused2[1]; Patrol->VARS.value[ListIndex]->SLSD.value.unused2[2] = defaultVARS.SLSD.value.unused2[2]; Patrol->VARS.value[ListIndex]->SLSD.value.unused2[3] = defaultVARS.SLSD.value.unused2[3]; Patrol->VARS.value[ListIndex]->SLSD.value.unused2[4] = defaultVARS.SLSD.value.unused2[4]; Patrol->VARS.value[ListIndex]->SLSD.value.unused2[5] = defaultVARS.SLSD.value.unused2[5]; Patrol->VARS.value[ListIndex]->SLSD.value.unused2[6] = defaultVARS.SLSD.value.unused2[6]; return; case 5: //name Patrol->VARS.value[ListIndex]->SCVR.Unload(); return; default: return; } return; case 22: //references if(!Patrol.IsLoaded()) return; if(ListFieldID == 0) //referencesSize { Patrol->SCR_.Unload(); return; } if(ListIndex >= Patrol->SCR_.value.size()) return; switch(ListFieldID) { case 1: //reference Patrol->SCR_.value[ListIndex]->reference = defaultSCR_.reference; Patrol->SCR_.value[ListIndex]->isSCRO = defaultSCR_.isSCRO; return; default: return; } return; case 23: //topic if(Patrol.IsLoaded()) Patrol->TNAM.Unload(); return; case 24: //owner if(Ownership.IsLoaded()) Ownership->XOWN.Unload(); return; case 25: //rank if(Ownership.IsLoaded()) Ownership->XRNK.Unload(); return; case 26: //count XCNT.Unload(); return; case 27: //radius XRDS.Unload(); return; case 28: //health XHLP.Unload(); return; case 29: //decals if(ListFieldID == 0) //decalsSize { XDCR.Unload(); return; } if(ListIndex >= XDCR.value.size()) return; switch(ListFieldID) { case 1: //reference XDCR.value[ListIndex]->reference = defaultXDCR.reference; return; case 2: //unknown1 XDCR.value[ListIndex]->unknown1[0] = defaultXDCR.unknown1[0]; XDCR.value[ListIndex]->unknown1[1] = defaultXDCR.unknown1[1]; XDCR.value[ListIndex]->unknown1[2] = defaultXDCR.unknown1[2]; XDCR.value[ListIndex]->unknown1[3] = defaultXDCR.unknown1[3]; XDCR.value[ListIndex]->unknown1[4] = defaultXDCR.unknown1[4]; XDCR.value[ListIndex]->unknown1[5] = defaultXDCR.unknown1[5]; XDCR.value[ListIndex]->unknown1[6] = defaultXDCR.unknown1[6]; XDCR.value[ListIndex]->unknown1[7] = defaultXDCR.unknown1[7]; XDCR.value[ListIndex]->unknown1[8] = defaultXDCR.unknown1[8]; XDCR.value[ListIndex]->unknown1[9] = defaultXDCR.unknown1[9]; XDCR.value[ListIndex]->unknown1[10] = defaultXDCR.unknown1[10]; XDCR.value[ListIndex]->unknown1[11] = defaultXDCR.unknown1[11]; XDCR.value[ListIndex]->unknown1[12] = defaultXDCR.unknown1[12]; XDCR.value[ListIndex]->unknown1[13] = defaultXDCR.unknown1[13]; XDCR.value[ListIndex]->unknown1[14] = defaultXDCR.unknown1[14]; XDCR.value[ListIndex]->unknown1[15] = defaultXDCR.unknown1[15]; XDCR.value[ListIndex]->unknown1[16] = defaultXDCR.unknown1[16]; XDCR.value[ListIndex]->unknown1[17] = defaultXDCR.unknown1[17]; XDCR.value[ListIndex]->unknown1[18] = defaultXDCR.unknown1[18]; XDCR.value[ListIndex]->unknown1[19] = defaultXDCR.unknown1[19]; XDCR.value[ListIndex]->unknown1[20] = defaultXDCR.unknown1[20]; XDCR.value[ListIndex]->unknown1[21] = defaultXDCR.unknown1[21]; XDCR.value[ListIndex]->unknown1[22] = defaultXDCR.unknown1[22]; XDCR.value[ListIndex]->unknown1[23] = defaultXDCR.unknown1[23]; return; default: return; } return; case 30: //linkedReference XLKR.Unload(); return; case 31: //startRed if(XCLP.IsLoaded()) XCLP->start.red = defaultCLR.red; return; case 32: //startGreen if(XCLP.IsLoaded()) XCLP->start.green = defaultCLR.green; return; case 33: //startBlue if(XCLP.IsLoaded()) XCLP->start.blue = defaultCLR.blue; return; case 34: //unused2 if(XCLP.IsLoaded()) XCLP->start.unused1 = defaultCLR.unused1; return; case 35: //endRed if(XCLP.IsLoaded()) XCLP->end.red = defaultCLR.red; return; case 36: //endGreen if(XCLP.IsLoaded()) XCLP->end.green = defaultCLR.green; return; case 37: //endBlue if(XCLP.IsLoaded()) XCLP->end.blue = defaultCLR.blue; return; case 38: //unused3 if(XCLP.IsLoaded()) XCLP->end.unused1 = defaultCLR.unused1; return; case 39: //activateParentFlags if(ActivateParents.IsLoaded()) ActivateParents->XAPD.Unload(); return; case 40: //activateParentRefs if(!ActivateParents.IsLoaded()) return; if(ListFieldID == 0) //activateParentRefsSize { ActivateParents->XAPR.Unload(); return; } if(ListIndex >= ActivateParents->XAPR.value.size()) return; switch(ListFieldID) { case 1: //reference ActivateParents->XAPR.value[ListIndex]->reference = defaultXAPR.reference; return; case 2: //delay ActivateParents->XAPR.value[ListIndex]->delay = defaultXAPR.delay; return; default: return; } return; case 41: //prompt XATO.Unload(); return; case 42: //parent if(XESP.IsLoaded()) XESP->parent = defaultXESP.parent; return; case 43: //parentFlags if(XESP.IsLoaded()) SetFlagMask(defaultXESP.flags); return; case 44: //unused4 if(XESP.IsLoaded()) { XESP->unused1[0] = defaultXESP.unused1[0]; XESP->unused1[1] = defaultXESP.unused1[1]; XESP->unused1[2] = defaultXESP.unused1[2]; } return; case 45: //emittance XEMI.Unload(); return; case 46: //boundRef XMBR.Unload(); return; case 47: //reflrefrs if(ListFieldID == 0) //reflrefrsSize { XPWR.Unload(); return; } if(ListIndex >= XPWR.value.size()) return; switch(ListFieldID) { case 1: //reference XPWR.value[ListIndex]->reference = defaultXPWR.reference; return; case 2: //type XPWR.value[ListIndex]->type = defaultXPWR.type; return; default: return; } return; case 48: //ignoredBySandbox XIBS.Unload(); return; case 49: //scale XSCL.Unload(); return; case 50: //posX DATA.value.posX = defaultDATA.posX; return; case 51: //posY DATA.value.posY = defaultDATA.posY; return; case 52: //posZ DATA.value.posZ = defaultDATA.posZ; return; case 53: //rotX DATA.value.rotX = defaultDATA.rotX; return; case 54: //rotY DATA.value.rotY = defaultDATA.rotY; return; case 55: //rotZ DATA.value.rotZ = defaultDATA.rotZ; return; default: return; } }
bool EFSHRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize) { switch(FieldID) { case 1: //flags1 SetHeaderFlagMask(*(UINT32 *)FieldValue); break; case 3: //flags2 SetHeaderUnknownFlagMask(*(UINT32 *)FieldValue); break; case 4: //eid EDID.Copy((STRING)FieldValue); break; case 5: //fillTexturePath ICON.Copy((STRING)FieldValue); break; case 6: //particleTexturePath ICO2.Copy((STRING)FieldValue); break; case 7: //flags SetFlagMask(*(UINT8 *)FieldValue); break; case 8: //unused1 if(ArraySize != 3) break; DATA.value.unused1[0] = ((UINT8ARRAY)FieldValue)[0]; DATA.value.unused1[1] = ((UINT8ARRAY)FieldValue)[1]; DATA.value.unused1[2] = ((UINT8ARRAY)FieldValue)[2]; break; case 9: //memSBlend DATA.value.memSBlend = *(UINT32 *)FieldValue; break; case 10: //memBlendOp DATA.value.memBlendOp = *(UINT32 *)FieldValue; break; case 11: //memZFunc DATA.value.memZFunc = *(UINT32 *)FieldValue; break; case 12: //fillRed DATA.value.fill.red = *(UINT8 *)FieldValue; break; case 13: //fillGreen DATA.value.fill.green = *(UINT8 *)FieldValue; break; case 14: //fillBlue DATA.value.fill.blue = *(UINT8 *)FieldValue; break; case 15: //unused2 if(ArraySize != 1) break; DATA.value.fill.unused1 = ((UINT8ARRAY)FieldValue)[0]; break; case 16: //fillAIn DATA.value.fillAIn = *(FLOAT32 *)FieldValue; break; case 17: //fillAFull DATA.value.fillAFull = *(FLOAT32 *)FieldValue; break; case 18: //fillAOut DATA.value.fillAOut = *(FLOAT32 *)FieldValue; break; case 19: //fillAPRatio DATA.value.fillAPRatio = *(FLOAT32 *)FieldValue; break; case 20: //fillAAmp DATA.value.fillAAmp = *(FLOAT32 *)FieldValue; break; case 21: //fillAFreq DATA.value.fillAFreq = *(FLOAT32 *)FieldValue; break; case 22: //fillAnimSpdU DATA.value.fillAnimSpdU = *(FLOAT32 *)FieldValue; break; case 23: //fillAnimSpdV DATA.value.fillAnimSpdV = *(FLOAT32 *)FieldValue; break; case 24: //edgeOff DATA.value.edgeOff = *(FLOAT32 *)FieldValue; break; case 25: //edgeRed DATA.value.edge.red = *(UINT8 *)FieldValue; break; case 26: //edgeGreen DATA.value.edge.green = *(UINT8 *)FieldValue; break; case 27: //edgeBlue DATA.value.edge.blue = *(UINT8 *)FieldValue; break; case 28: //unused3 if(ArraySize != 1) break; DATA.value.edge.unused1 = ((UINT8ARRAY)FieldValue)[0]; break; case 29: //edgeAIn DATA.value.edgeAIn = *(FLOAT32 *)FieldValue; break; case 30: //edgeAFull DATA.value.edgeAFull = *(FLOAT32 *)FieldValue; break; case 31: //edgeAOut DATA.value.edgeAOut = *(FLOAT32 *)FieldValue; break; case 32: //edgeAPRatio DATA.value.edgeAPRatio = *(FLOAT32 *)FieldValue; break; case 33: //edgeAAmp DATA.value.edgeAAmp = *(FLOAT32 *)FieldValue; break; case 34: //edgeAFreq DATA.value.edgeAFreq = *(FLOAT32 *)FieldValue; break; case 35: //fillAFRatio DATA.value.fillAFRatio = *(FLOAT32 *)FieldValue; break; case 36: //edgeAFRatio DATA.value.edgeAFRatio = *(FLOAT32 *)FieldValue; break; case 37: //memDBlend DATA.value.memDBlend = *(UINT8 *)FieldValue; break; case 38: //partSBlend DATA.value.partSBlend = *(UINT8 *)FieldValue; break; case 39: //partBlendOp DATA.value.partBlendOp = *(UINT8 *)FieldValue; break; case 40: //partZFunc DATA.value.partZFunc = *(UINT8 *)FieldValue; break; case 41: //partDBlend DATA.value.partDBlend = *(UINT8 *)FieldValue; break; case 42: //partBUp DATA.value.partBUp = *(FLOAT32 *)FieldValue; break; case 43: //partBFull DATA.value.partBFull = *(FLOAT32 *)FieldValue; break; case 44: //partBDown DATA.value.partBDown = *(FLOAT32 *)FieldValue; break; case 45: //partBFRatio DATA.value.partBFRatio = *(FLOAT32 *)FieldValue; break; case 46: //partBPRatio DATA.value.partBPRatio = *(FLOAT32 *)FieldValue; break; case 47: //partLTime DATA.value.partLTime = *(FLOAT32 *)FieldValue; break; case 48: //partLDelta DATA.value.partLDelta = *(FLOAT32 *)FieldValue; break; case 49: //partNSpd DATA.value.partNSpd = *(FLOAT32 *)FieldValue; break; case 50: //partNAcc DATA.value.partNAcc = *(FLOAT32 *)FieldValue; break; case 51: //partVel1 DATA.value.partVel1 = *(FLOAT32 *)FieldValue; break; case 52: //partVel2 DATA.value.partVel2 = *(FLOAT32 *)FieldValue; break; case 53: //partVel3 DATA.value.partVel3 = *(FLOAT32 *)FieldValue; break; case 54: //partAcc1 DATA.value.partAcc1 = *(FLOAT32 *)FieldValue; break; case 55: //partAcc2 DATA.value.partAcc2 = *(FLOAT32 *)FieldValue; break; case 56: //partAcc3 DATA.value.partAcc3 = *(FLOAT32 *)FieldValue; break; case 57: //partKey1 DATA.value.partKey1 = *(FLOAT32 *)FieldValue; break; case 58: //partKey2 DATA.value.partKey2 = *(FLOAT32 *)FieldValue; break; case 59: //partKey1Time DATA.value.partKey1Time = *(FLOAT32 *)FieldValue; break; case 60: //partKey2Time DATA.value.partKey2Time = *(FLOAT32 *)FieldValue; break; case 61: //key1Red DATA.value.key1.red = *(UINT8 *)FieldValue; break; case 62: //key1Green DATA.value.key1.green = *(UINT8 *)FieldValue; break; case 63: //key1Blue DATA.value.key1.blue = *(UINT8 *)FieldValue; break; case 64: //unused4 if(ArraySize != 1) break; DATA.value.key1.unused1 = ((UINT8ARRAY)FieldValue)[0]; break; case 65: //key2Red DATA.value.key2.red = *(UINT8 *)FieldValue; break; case 66: //key2Green DATA.value.key2.green = *(UINT8 *)FieldValue; break; case 67: //key2Blue DATA.value.key2.blue = *(UINT8 *)FieldValue; break; case 68: //unused5 if(ArraySize != 1) break; DATA.value.key2.unused1 = ((UINT8ARRAY)FieldValue)[0]; break; case 69: //key3Red DATA.value.key3.red = *(UINT8 *)FieldValue; break; case 70: //key3Green DATA.value.key3.green = *(UINT8 *)FieldValue; break; case 71: //key3Blue DATA.value.key3.blue = *(UINT8 *)FieldValue; break; case 72: //unused6 if(ArraySize != 1) break; DATA.value.key3.unused1 = ((UINT8ARRAY)FieldValue)[0]; break; case 73: //key1A DATA.value.key1A = *(FLOAT32 *)FieldValue; break; case 74: //key2A DATA.value.key2A = *(FLOAT32 *)FieldValue; break; case 75: //key3A DATA.value.key3A = *(FLOAT32 *)FieldValue; break; case 76: //key1Time DATA.value.key1Time = *(FLOAT32 *)FieldValue; break; case 77: //key2Time DATA.value.key2Time = *(FLOAT32 *)FieldValue; break; case 78: //key3Time DATA.value.key3Time = *(FLOAT32 *)FieldValue; break; default: break; } return false; }
void PROJRecord::DeleteField(FIELD_IDENTIFIERS) { GENOBND defaultOBND; FNVMODS defaultMODS; GENDEST defaultDEST; DESTDSTD defaultDSTD; PROJDATA defaultDATA; switch(FieldID) { case 1: //flags1 SetHeaderFlagMask(0); return; case 3: //versionControl1 flagsUnk = 0; return; case 4: //eid EDID.Unload(); return; case 5: //formVersion formVersion = 0; return; case 6: //versionControl2 versionControl2[0] = 0; versionControl2[1] = 0; return; case 7: //boundX1 OBND.value.x1 = defaultOBND.x1; return; case 8: //boundY1 OBND.value.y1 = defaultOBND.y1; return; case 9: //boundZ1 OBND.value.z1 = defaultOBND.z1; return; case 10: //boundX2 OBND.value.x2 = defaultOBND.x2; return; case 11: //boundY2 OBND.value.y2 = defaultOBND.y2; return; case 12: //boundZ2 OBND.value.z2 = defaultOBND.z2; return; case 13: //full FULL.Unload(); return; case 14: //modPath if(MODL.IsLoaded()) MODL->MODL.Unload(); return; case 15: //modb if(MODL.IsLoaded()) MODL->MODB.Unload(); return; case 16: //modt_p if(MODL.IsLoaded()) MODL->MODT.Unload(); return; case 17: //altTextures if(MODL.IsLoaded()) { if(ListFieldID == 0) //altTextures { MODL->Textures.Unload(); return; } if(ListIndex >= MODL->Textures.MODS.size()) return; switch(ListFieldID) { case 1: //name delete []MODL->Textures.MODS[ListIndex]->name; MODL->Textures.MODS[ListIndex]->name = NULL; return; case 2: //texture MODL->Textures.MODS[ListIndex]->texture = defaultMODS.texture; return; case 3: //index MODL->Textures.MODS[ListIndex]->index = defaultMODS.index; return; default: return; } } return; case 18: //modelFlags if(MODL.IsLoaded()) MODL->MODD.Unload(); return; case 19: //destructableHealth if(Destructable.IsLoaded()) Destructable->DEST.value.health = defaultDEST.health; return; case 20: //destructableCount if(Destructable.IsLoaded()) Destructable->DEST.value.count = defaultDEST.count; return; case 21: //destructableFlags if(Destructable.IsLoaded()) Destructable->SetFlagMask(defaultDEST.flags); return; case 22: //destructableUnused1 if(Destructable.IsLoaded()) { Destructable->DEST.value.unused1[0] = defaultDSTD.health; } return; case 23: //destructableStages if(Destructable.IsLoaded()) { if(ListFieldID == 0) //destructableStages { Destructable->Stages.Unload(); return; } if(ListIndex >= Destructable->Stages.value.size()) return; switch(ListFieldID) { case 1: //health Destructable->Stages.value[ListIndex]->DSTD.value.health = defaultDSTD.health; return; case 2: //index Destructable->Stages.value[ListIndex]->DSTD.value.index = defaultDSTD.index; return; case 3: //stage Destructable->Stages.value[ListIndex]->DSTD.value.stage = defaultDSTD.stage; return; case 4: //flags Destructable->Stages.value[ListIndex]->SetFlagMask(defaultDSTD.flags); return; case 5: //dps Destructable->Stages.value[ListIndex]->DSTD.value.dps = defaultDSTD.dps; return; case 6: //explosion Destructable->Stages.value[ListIndex]->DSTD.value.explosion = defaultDSTD.explosion; return; case 7: //debris Destructable->Stages.value[ListIndex]->DSTD.value.debris = defaultDSTD.debris; return; case 8: //debrisCount Destructable->Stages.value[ListIndex]->DSTD.value.debrisCount = defaultDSTD.debrisCount; return; case 9: //modPath Destructable->Stages.value[ListIndex]->DMDL.Unload(); return; case 10: //modt_p Destructable->Stages.value[ListIndex]->DMDT.Unload(); return; default: return; } } return; case 24: //flags SetFlagMask(defaultDATA.flags); return; case 25: //projType SetType(defaultDATA.projType); return; case 26: //gravity DATA.value.gravity = defaultDATA.gravity; return; case 27: //speed DATA.value.speed = defaultDATA.speed; return; case 28: //range DATA.value.range = defaultDATA.range; return; case 29: //light DATA.value.light = defaultDATA.light; return; case 30: //flash DATA.value.flash = defaultDATA.flash; return; case 31: //tracerChance DATA.value.tracerChance = defaultDATA.tracerChance; return; case 32: //altExplProximityTrigger DATA.value.altExplProximityTrigger = defaultDATA.altExplProximityTrigger; return; case 33: //altExplProximityTimer DATA.value.altExplProximityTimer = defaultDATA.altExplProximityTimer; return; case 34: //explosion DATA.value.explosion = defaultDATA.explosion; return; case 35: //sound DATA.value.sound = defaultDATA.sound; return; case 36: //flashDuration DATA.value.flashDuration = defaultDATA.flashDuration; return; case 37: //fadeDuration DATA.value.fadeDuration = defaultDATA.fadeDuration; return; case 38: //impactForce DATA.value.impactForce = defaultDATA.impactForce; return; case 39: //soundCountdown DATA.value.soundCountdown = defaultDATA.soundCountdown; return; case 40: //soundDisable DATA.value.soundDisable = defaultDATA.soundDisable; return; case 41: //defaultWeaponSource DATA.value.defaultWeaponSource = defaultDATA.defaultWeaponSource; return; case 42: //rotX DATA.value.rotX = defaultDATA.rotX; return; case 43: //rotY DATA.value.rotY = defaultDATA.rotY; return; case 44: //rotZ DATA.value.rotZ = defaultDATA.rotZ; return; case 45: //bouncyMult DATA.value.bouncyMult = defaultDATA.bouncyMult; return; case 46: //modelPath NAM1.Unload(); return; case 47: //nam2_p NAM2.Unload(); return; case 48: //soundLevel VNAM.Unload(); return; default: return; } }
bool ACRERecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, uint32_t ArraySize) { switch(FieldID) { case 1: //flags1 SetHeaderFlagMask(*(uint32_t *)FieldValue); break; case 3: //flags2 SetHeaderUnknownFlagMask(*(uint32_t *)FieldValue); break; case 4: //eid EDID.Copy((char *)FieldValue); break; case 5: //base NAME.value = *(FORMID *)FieldValue; return true; case 6: //owner Ownership.Load(); Ownership->XOWN.value = *(FORMID *)FieldValue; return true; case 7: //rank Ownership.Load(); Ownership->XRNK.Load(); *Ownership->XRNK.value = *(int32_t *)FieldValue; break; case 8: //globalVariable Ownership.Load(); Ownership->XGLB.value = *(FORMID *)FieldValue; return true; case 9: //lod1 XLOD.Load(); XLOD->lod1 = *(float *)FieldValue; break; case 10: //lod2 XLOD.Load(); XLOD->lod2 = *(float *)FieldValue; break; case 11: //lod3 XLOD.Load(); XLOD->lod3 = *(float *)FieldValue; break; case 12: //parent XESP.Load(); XESP->parent = *(FORMID *)FieldValue; return true; case 13: //parentFlags SetFlagMask(*(uint8_t *)FieldValue); break; case 14: //unused1 if(ArraySize != 3) break; XESP.Load(); XESP->unused1[0] = ((UINT8ARRAY)FieldValue)[0]; XESP->unused1[1] = ((UINT8ARRAY)FieldValue)[1]; XESP->unused1[2] = ((UINT8ARRAY)FieldValue)[2]; break; case 15: //xrgd_p XRGD.Copy((UINT8ARRAY)FieldValue, ArraySize); break; case 16: //scale XSCL.Load(); XSCL.value = *(float *)FieldValue; break; case 17: //posX DATA.value.posX = *(float *)FieldValue; break; case 18: //posY DATA.value.posY = *(float *)FieldValue; break; case 19: //posZ DATA.value.posZ = *(float *)FieldValue; break; case 20: //rotX DATA.value.rotX = *(float *)FieldValue; break; case 21: //rotY DATA.value.rotY = *(float *)FieldValue; break; case 22: //rotZ DATA.value.rotZ = *(float *)FieldValue; break; default: break; } return false; }