unsigned int shiftOffset = STR->getOriginalSectionBeginOffset(); Trigger* first = TRIG->triggers.get(0); TRIG->triggers.remove(0); for (unsigned int i = 0; i < 8; i++) { // Make a new trigger MALLOC_N(trigger, Trigger, 1, { free(first); return false; }); if (!TRIG->triggers.insert(0, trigger)) { free(first); return false; } // Copy original values memcpy(trigger, first, sizeof(Trigger)); // Set to one specific player only for (unsigned int o = 0; o < 28; o++) { trigger->players[o] = 0; } trigger->players[i] = 1; SET_ACT_COUNT_UP_ADDR(1, EUD_STR, shiftOffset); // Add offset to STR, void condition in all lists // Remove action from all triggers unsigned int nextActionIndex = 2; for (unsigned int o = 0; o < 8; o++) { ACT_SET_DEATHS((&(trigger->actions[nextActionIndex])), ADDRESS_TO_EPD(EUD_TRGLIST[o]), Modifiers::Add, 378, 0); // Set first pointer to 2nd action type nextActionIndex++; ACT_SET_DEATHS((&(trigger->actions[nextActionIndex])), ADDRESS_TO_EPD(EUD_CP), Modifiers::SetTo, ADDRESS_TO_EPD(EUD_TRGLIST[o]), 0); // Set CP to 2nd action type nextActionIndex++; ACT_SET_DEATHS((&(trigger->actions[nextActionIndex])), 13, Modifiers::SetTo, 0, 0); // Set action type to 0 nextActionIndex++; ACT_SET_DEATHS((&(trigger->actions[nextActionIndex])), ADDRESS_TO_EPD(EUD_TRGLIST[o]), Modifiers::Subtract, 378, 0); // Set first pointer to original value nextActionIndex++; } ACT_SET_DEATHS((&(trigger->actions[nextActionIndex])), ADDRESS_TO_EPD(EUD_CP), Modifiers::SetTo, i, 0); // Restore current played ID nextActionIndex++; } }