bool SLGMRecord::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: //iconPath ICON.Copy((STRING)FieldValue); break; case 10: //script SCRI.value = *(FORMID *)FieldValue; return true; case 11: //value DATA.value.value = *(UINT32 *)FieldValue; break; case 12: //weight DATA.value.weight = *(FLOAT32 *)FieldValue; break; case 13: //soulType SetSoul(*(UINT8 *)FieldValue); break; case 14: //capacity SetCapacity(*(UINT8 *)FieldValue); break; default: break; } return false; }
bool REFRRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, uint32_t ArraySize) { Data.Load(); switch(FieldID) { case 1: //flags1 SetHeaderFlagMask(*(uint32_t *)FieldValue); break; case 3: //flags2 SetHeaderUnknownFlagMask(*(uint32_t *)FieldValue); break; case 4: //eid Data->EDID.Copy((char *)FieldValue); break; case 5: //base Data->NAME.value = *(FORMID *)FieldValue; return true; case 6: //destination Data->XTEL.Load(); Data->XTEL->destinationFid = *(FORMID *)FieldValue; return true; case 7: //destinationPosX Data->XTEL.Load(); Data->XTEL->destination.posX = *(float *)FieldValue; break; case 8: //destinationPosY Data->XTEL.Load(); Data->XTEL->destination.posY = *(float *)FieldValue; break; case 9: //destinationPosZ Data->XTEL.Load(); Data->XTEL->destination.posZ = *(float *)FieldValue; break; case 10: //destinationRotX Data->XTEL.Load(); Data->XTEL->destination.rotX = *(float *)FieldValue; break; case 11: //destinationRotY Data->XTEL.Load(); Data->XTEL->destination.rotY = *(float *)FieldValue; break; case 12: //destinationRotZ Data->XTEL.Load(); Data->XTEL->destination.rotZ = *(float *)FieldValue; break; case 13: //lockLevel Data->XLOC.Load(); Data->XLOC->level = *(uint8_t *)FieldValue; break; case 14: //unused1 if(ArraySize != 3) break; Data->XLOC.Load(); Data->XLOC->unused1[0] = ((UINT8ARRAY)FieldValue)[0]; Data->XLOC->unused1[1] = ((UINT8ARRAY)FieldValue)[1]; Data->XLOC->unused1[2] = ((UINT8ARRAY)FieldValue)[2]; break; case 15: //lockKey Data->XLOC.Load(); Data->XLOC->key = *(FORMID *)FieldValue; return true; case 16: //unused2 if(ArraySize != 4) break; Data->XLOC.Load(); Data->XLOC->unused2[0] = ((UINT8ARRAY)FieldValue)[0]; Data->XLOC->unused2[1] = ((UINT8ARRAY)FieldValue)[1]; Data->XLOC->unused2[2] = ((UINT8ARRAY)FieldValue)[2]; Data->XLOC->unused2[3] = ((UINT8ARRAY)FieldValue)[3]; break; case 17: //lockFlags SetLockFlagMask(*(uint8_t *)FieldValue); break; case 18: //unused3 if(ArraySize != 3) break; Data->XLOC.Load(); Data->XLOC->unused3[0] = ((UINT8ARRAY)FieldValue)[0]; Data->XLOC->unused3[1] = ((UINT8ARRAY)FieldValue)[1]; Data->XLOC->unused3[2] = ((UINT8ARRAY)FieldValue)[2]; break; case 19: //owner Data->Ownership.Load(); Data->Ownership->XOWN.value = *(FORMID *)FieldValue; return true; case 20: //rank Data->Ownership.Load(); Data->Ownership->XRNK.Load(); *Data->Ownership->XRNK.value = *(int32_t *)FieldValue; break; case 21: //globalVariable Data->Ownership.Load(); Data->Ownership->XGLB.value = *(FORMID *)FieldValue; return true; case 22: //parent Data->XESP.Load(); Data->XESP->parent = *(FORMID *)FieldValue; return true; case 23: //parentFlags SetParentFlagMask(*(uint8_t *)FieldValue); break; case 24: //unused4 if(ArraySize != 3) break; Data->XESP.Load(); Data->XESP->unused1[0] = ((UINT8ARRAY)FieldValue)[0]; Data->XESP->unused1[1] = ((UINT8ARRAY)FieldValue)[1]; Data->XESP->unused1[2] = ((UINT8ARRAY)FieldValue)[2]; break; case 25: //target Data->XTRG.value = *(FORMID *)FieldValue; return true; case 26: //seed Data->XSED.Load(); //Borrowing ArraySize to flag if the new value is an offset if(ArraySize) { Data->XSED->isOffset = true; Data->XSED->offset = *(uint8_t *)FieldValue; } else { Data->XSED->isOffset = false; Data->XSED->seed = *(uint32_t *)FieldValue; } break; case 27: //lod1 Data->XLOD.Load(); Data->XLOD->lod1 = *(float *)FieldValue; break; case 28: //lod2 Data->XLOD.Load(); Data->XLOD->lod2 = *(float *)FieldValue; break; case 29: //lod3 Data->XLOD.Load(); Data->XLOD->lod3 = *(float *)FieldValue; break; case 30: //charge Data->XCHG.value = *(float *)FieldValue; break; case 31: //health Data->XHLT.value = *(int32_t *)FieldValue; break; case 32: //unknownXPCIFormID Data->XPCI.Load(); Data->XPCI->XPCI.value = *(FORMID *)FieldValue; return true; case 33: //unknownXPCIString Data->XPCI.Load(); Data->XPCI->FULL.Copy((char *)FieldValue); break; case 34: //levelMod Data->XLCM.value = *(int32_t *)FieldValue; break; case 35: //unknownXRTMFormID Data->XRTM.value = *(FORMID *)FieldValue; return true; case 36: //actionFlags SetActionFlagMask(*(uint32_t *)FieldValue); break; case 37: //count Data->XCNT.value = *(int32_t *)FieldValue; break; case 38: //markerFlags SetMapFlagMask(*(uint8_t *)FieldValue); break; case 39: //markerName Data->Marker.Load(); Data->Marker->FULL.Copy((char *)FieldValue); break; case 40: //markerType SetMarkerType(*(uint8_t *)FieldValue); break; case 41: //markerUnused if(ArraySize != 1) break; Data->Marker.Load(); Data->Marker->TNAM.value.unused1 = ((UINT8ARRAY)FieldValue)[0]; break; case 42: //scale Data->XSCL.Load(); Data->XSCL.value = *(float *)FieldValue; break; case 43: //soulType SetSoul(*(uint8_t *)FieldValue); break; case 44: //posX Data->DATA.value.posX = *(float *)FieldValue; break; case 45: //posY Data->DATA.value.posY = *(float *)FieldValue; break; case 46: //posZ Data->DATA.value.posZ = *(float *)FieldValue; break; case 47: //rotX Data->DATA.value.rotX = *(float *)FieldValue; break; case 48: //rotY Data->DATA.value.rotY = *(float *)FieldValue; break; case 49: //rotZ Data->DATA.value.rotZ = *(float *)FieldValue; break; default: break; } return false; }