Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int CreateDroppedEquipment_FUN_00798c20(int KillerIndex, int TargetPrizeStructAddress, int SomeAddress)
- {
- NumberOfDroppedEquipment = NumberOfDroppedEquipmentDuringFight_FUN_00798be0(SomeAddress); // returns -1 if 8 or more equipment have been dropped
- if (NumberOfDroppedEquipment < 0) {
- return -1;
- }
- DroppedEquipmentArrayOffset = NumberOfDroppedEquipment * 22;
- CurrentDroppedEquipmentAddress = SomeAddress + 0xfe + DroppedEquipmentArrayOffset;
- *(DroppedEquipmentArrayOffset + 0x100 + SomeAddress) = 1;
- PartyMemberIndexLoop = 0;
- EquipmentOwnerBase = 0;
- do {
- IsPartyMemberEnabled = IsPartyMemberEnabled_FUN_00785460(PartyMemberIndexLoop);
- if (IsPartyMemberEnabled != 0) {
- EquipmentOwnerBase = EquipmentOwnerBase + 1;
- }
- PartyMemberIndexLoop = PartyMemberIndexLoop + 1;
- } while (PartyMemberIndexLoop < 7);
- if (KillerIndex < 7) { // If killer is not one of the regular 7 party members (Seymour or aeons, and possibly enemies themselves?)
- EquipmentOwnerBase = EquipmentOwnerBase + 3; // Presumbly a bonus chance for killer to be equipment owner
- }
- else {
- KillerIndex = 0; // Tidus gets preferential treatment for non-party kills?
- }
- RNG_EquipmentOwner = ShuffleRNGSeed_FUN_00798900(12);
- NumberEnabledPartyMembers = 0;
- PartyMemberIndexLoop = 0;
- do {
- IsPartyMemberEnabled = IsPartyMemberEnabled_FUN_00785460(PartyMemberIndexLoop);
- if (IsPartyMemberEnabled != 0) {
- NumberEnabledPartyMembers = NumberEnabledPartyMembers + 1;
- if (RNG_EquipmentOwner % EquipmentOwnerBase < NumberEnabledPartyMembers) {
- KillerIndex = PartyMemberIndexLoop;
- break;
- }
- }
- PartyMemberIndexLoop = PartyMemberIndexLoop + 1;
- } while (PartyMemberIndexLoop < 7);
- RNG_WeaponOrArmor = ShuffleRNGSeed_FUN_00798900(12);
- *(byte *)(NumberOfDroppedEquipment + 0x102 + SomeAddress) = KillerIndex;
- *(byte *)(DroppedEquipmentArrayOffset + 0x103 + SomeAddress) = RNG_WeaponOrArmor & 1;
- *(byte *)(DroppedEquipmentArrayOffset + 0x104 + SomeAddress) = 0xff;
- *(byte *)(DroppedEquipmentArrayOffset + 0x106 + SomeAddress) = *(byte *)(TargetPrizeStructAddress + 0x2e);
- *(byte *)(DroppedEquipmentArrayOffset + 0x107 + SomeAddress) = *(byte *)(TargetPrizeStructAddress + 0x30);
- *(byte *)(DroppedEquipmentArrayOffset + 0x108 + SomeAddress) = *(byte *)(TargetPrizeStructAddress + 0x2f);
- RNG_NumberOfSlots = ShuffleRNGSeed_FUN_00798900(12);
- NumberOfSlotsModifier = (uint)*(byte *)(TargetPrizeStructAddress + 0x2d) + ((RNG_NumberOfSlots & 7) - 4);
- NumberOfSlots = FixOutOfBoundsValue_FUN_0079a0d0((int)(NumberOfSlotsModifier + (NumberOfSlotsModifier >> 31 & 3)) >> 2,1,4);
- *(byte *)(NumberOfDroppedEquipment + 0x109 + SomeAddress) = NumberOfSlots;
- RNG_NumberOfAbilities = ShuffleRNGSeed_FUN_00798900(12);
- NumberOfAbilitiesModifier = (uint)*(byte *)(TargetPrizeStructAddress + 0x31) + ((RNG_NumberOfAbilities & 7) - 4);
- NumberOfAutoAbilities = (int)(NumberOfAbilitiesModifier + (NumberOfAbilitiesModifier >> 31 & 7)) >> 3;
- PossibleAutoAbilitiesArrayAddress = (ushort *)(TargetPrizeStructAddress + 0x32 + ((uint)*(byte *)(NumberOfDroppedEquipment + 0x103 + SomeAddress) + (uint)*(byte *)(NumberOfDroppedEquipment + 0x102 + SomeAddress) * 2) * 16);
- PiercingAutoAbilityValue = *PossibleAutoAbilitiesArrayAddress;
- if ((NumberOfSlots == 0) || (PiercingAutoAbilityValue == 0)) {
- NumberOfAbilitiesAdded = 0;
- }
- else {
- CurrentDroppedEquipmentAddress + 14 = PiercingAutoAbilityValue;
- NumberOfAbilitiesAdded = 1;
- }
- if (0 < NumberOfAutoAbilities) {
- CurrentDroppedEquipmentAbilityAddress = CurrentDroppedEquipmentAddress + NumberOfAbilitiesAdded + 14;
- do {
- if ((int)(uint)*(byte *)((int)CurrentDroppedEquipmentAddress + 11) <= NumberOfAbilitiesAdded) break;
- RNG_AbilityArrayIndex = ShuffleRNGSeed_FUN_00798900(13);
- AutoAbilityToBeAdded = PossibleAutoAbilitiesArrayAddress[RNG_AbilityArrayIndex % 7 + 1];
- if (AutoAbilityToBeAdded != 0) {
- PickedAutoAbility = PickAutoAbilityFromArray_FUN_00798aa0((uint)AutoAbilityToBeAdded);
- NumberAddedAbilities = 0;
- if (0 < NumberOfAbilitiesAdded) {
- CurrentEquipmentAbilitySlotAddress = CurrentDroppedEquipmentAddress + 14;
- do {
- PickedAutoAbility2 = PickAutoAbilityFromArray_FUN_00798aa0((uint)*CurrentEquipmentAbilitySlotAddress);
- if (PickedAutoAbility2 == PickedAutoAbility) goto LAB_00798e2c;
- NumberAddedAbilities = NumberAddedAbilities + 1;
- CurrentEquipmentAbilitySlotAddress = CurrentEquipmentAbilitySlotAddress + 2;
- } while (NumberAddedAbilities < NumberOfAbilitiesAdded);
- }
- *CurrentDroppedEquipmentAbilityAddress = AutoAbilityToBeAdded;
- NumberOfAbilitiesAdded = NumberOfAbilitiesAdded + 1;
- CurrentDroppedEquipmentAbilityAddress = CurrentDroppedEquipmentAbilityAddress + 2;
- }
- LAB_00798e2c:
- NumberOfAutoAbilities = NumberOfAutoAbilities + -1;
- } while (0 < NumberOfAutoAbilities);
- }
- if (NumberOfAbilitiesAdded < 4) {
- NumberOfAbilitySlotsToNULL = (4 - NumberOfAbilitiesAdded) >> 1;
- AddressOfEquipmentAbilitySlotsToNULL = (undefined4 *)(CurrentDroppedEquipmentAddress + (NumberOfAbilitiesAdded + 14));
- while (NumberOfAbilitySlotsToNULL != 0) {
- NumberOfAbilitySlotsToNULL = NumberOfAbilitySlotsToNULL - 1;
- *AddressOfEquipmentAbilitySlotsToNULL = 0x00ff00ff;
- AddressOfEquipmentAbilitySlotsToNULL = AddressOfEquipmentAbilitySlotsToNULL + 2;
- }
- NumberOfAbilitySlotsToNULL = (uint)((4 - NumberOfAbilitiesAdded & 1) != 0);
- while (NumberOfAbilitySlotsToNULL != 0) {
- NumberOfAbilitySlotsToNULL = NumberOfAbilitySlotsToNULL - 1;
- *(byte *)AddressOfEquipmentAbilitySlotsToNULL = 0xff;
- AddressOfEquipmentAbilitySlotsToNULL = AddressOfEquipmentAbilitySlotsToNULL + 2);
- }
- }
- WeaponGroupID = I_THINK_DetermineWeaponNameBasedOnAutoAbilities_FUN_007a0d10(CurrentDroppedEquipmentAddress);
- *CurrentDroppedEquipmentAddress = WeaponGroupID;
- I_THINK_DetermineWeaponDesignBasedOnAutoAbilities_FUN_007a0c70(WeaponGroupID, (byte *)(CurrentDroppedEquipmentAddress + 4), 0, CurrentDroppedEquipmentAddress + 12);
- return 0;
- }
Add Comment
Please, Sign In to add comment