mirror of
				https://github.com/Zelda64Recomp/Zelda64Recomp.git
				synced 2025-10-30 08:03:03 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			139 lines
		
	
	
		
			No EOL
		
	
	
		
			5.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			139 lines
		
	
	
		
			No EOL
		
	
	
		
			5.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include "patches.h"
 | |
| /*
 | |
| // Infinite magic
 | |
| s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type) {
 | |
|    InterfaceContext* interfaceCtx = &play->interfaceCtx;
 | |
| 
 | |
|    magicToConsume = 0;
 | |
| 
 | |
|    // // Magic is not acquired yet
 | |
|    // if (!gSaveContext.save.saveInfo.playerData.isMagicAcquired) {
 | |
|    //     return false;
 | |
|    // }
 | |
| 
 | |
|    // Not enough magic available to consume
 | |
|    if ((gSaveContext.save.saveInfo.playerData.magic - magicToConsume) < 0) {
 | |
|        if (gSaveContext.magicCapacity != 0) {
 | |
|            Audio_PlaySfx(NA_SE_SY_ERROR);
 | |
|        }
 | |
|        return false;
 | |
|    }
 | |
| 
 | |
|    switch (type) {
 | |
|        case MAGIC_CONSUME_NOW:
 | |
|        case MAGIC_CONSUME_NOW_ALT:
 | |
|            // Drain magic immediately e.g. Deku Bubble
 | |
|            if ((gSaveContext.magicState == MAGIC_STATE_IDLE) ||
 | |
|                (gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS)) {
 | |
|                if (gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS) {
 | |
|                    play->actorCtx.lensActive = false;
 | |
|                }
 | |
|                if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) {
 | |
|                    magicToConsume = 0;
 | |
|                }
 | |
|                gSaveContext.magicToConsume = magicToConsume;
 | |
|                gSaveContext.magicState = MAGIC_STATE_CONSUME_SETUP;
 | |
|                return true;
 | |
|            } else {
 | |
|                Audio_PlaySfx(NA_SE_SY_ERROR);
 | |
|                return false;
 | |
|            }
 | |
| 
 | |
|        case MAGIC_CONSUME_WAIT_NO_PREVIEW:
 | |
|            // Sets consume target but waits to consume.
 | |
|            // No yellow magic to preview target consumption.
 | |
|            if ((gSaveContext.magicState == MAGIC_STATE_IDLE) ||
 | |
|                (gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS)) {
 | |
|                if (gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS) {
 | |
|                    play->actorCtx.lensActive = false;
 | |
|                }
 | |
|                if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) {
 | |
|                    magicToConsume = 0;
 | |
|                }
 | |
|                gSaveContext.magicToConsume = magicToConsume;
 | |
|                gSaveContext.magicState = MAGIC_STATE_METER_FLASH_3;
 | |
|                return true;
 | |
|            } else {
 | |
|                Audio_PlaySfx(NA_SE_SY_ERROR);
 | |
|                return false;
 | |
|            }
 | |
| 
 | |
|        case MAGIC_CONSUME_LENS:
 | |
|            if (gSaveContext.magicState == MAGIC_STATE_IDLE) {
 | |
|                if (gSaveContext.save.saveInfo.playerData.magic != 0) {
 | |
|                    interfaceCtx->magicConsumptionTimer = 80;
 | |
|                    gSaveContext.magicState = MAGIC_STATE_CONSUME_LENS;
 | |
|                    return true;
 | |
|                } else {
 | |
|                    return false;
 | |
|                }
 | |
|            } else if (gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS) {
 | |
|                return true;
 | |
|            } else {
 | |
|                return false;
 | |
|            }
 | |
| 
 | |
|        case MAGIC_CONSUME_WAIT_PREVIEW:
 | |
|            // Sets consume target but waits to consume.
 | |
|            // Preview consumption with a yellow bar. e.g. Spin Attack
 | |
|            if ((gSaveContext.magicState == MAGIC_STATE_IDLE) ||
 | |
|                (gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS)) {
 | |
|                if (gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS) {
 | |
|                    play->actorCtx.lensActive = false;
 | |
|                }
 | |
|                gSaveContext.magicToConsume = magicToConsume;
 | |
|                gSaveContext.magicState = MAGIC_STATE_METER_FLASH_2;
 | |
|                return true;
 | |
|            } else {
 | |
|                Audio_PlaySfx(NA_SE_SY_ERROR);
 | |
|                return false;
 | |
|            }
 | |
| 
 | |
|        case MAGIC_CONSUME_GORON_ZORA:
 | |
|            // Goron spiked rolling or Zora electric barrier
 | |
|            if (gSaveContext.save.saveInfo.playerData.magic != 0) {
 | |
|                interfaceCtx->magicConsumptionTimer = 10;
 | |
|                gSaveContext.magicState = MAGIC_STATE_CONSUME_GORON_ZORA_SETUP;
 | |
|                return true;
 | |
|            } else {
 | |
|                return false;
 | |
|            }
 | |
| 
 | |
|        case MAGIC_CONSUME_GIANTS_MASK:
 | |
|            // Wearing Giant's Mask
 | |
|            if (gSaveContext.magicState == MAGIC_STATE_IDLE) {
 | |
|                if (gSaveContext.save.saveInfo.playerData.magic != 0) {
 | |
|                    interfaceCtx->magicConsumptionTimer = R_MAGIC_CONSUME_TIMER_GIANTS_MASK;
 | |
|                    gSaveContext.magicState = MAGIC_STATE_CONSUME_GIANTS_MASK;
 | |
|                    return true;
 | |
|                } else {
 | |
|                    return false;
 | |
|                }
 | |
|            }
 | |
|            if (gSaveContext.magicState == MAGIC_STATE_CONSUME_GIANTS_MASK) {
 | |
|                return true;
 | |
|            } else {
 | |
|                return false;
 | |
|            }
 | |
| 
 | |
|        case MAGIC_CONSUME_DEITY_BEAM:
 | |
|            // Consumes magic immediately
 | |
|            if ((gSaveContext.magicState == MAGIC_STATE_IDLE) ||
 | |
|                (gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS)) {
 | |
|                if (gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS) {
 | |
|                    play->actorCtx.lensActive = false;
 | |
|                }
 | |
|                if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) {
 | |
|                    magicToConsume = 0;
 | |
|                }
 | |
|                gSaveContext.save.saveInfo.playerData.magic -= magicToConsume;
 | |
|                return true;
 | |
|            } else {
 | |
|                Audio_PlaySfx(NA_SE_SY_ERROR);
 | |
|                return false;
 | |
|            }
 | |
|    }
 | |
| 
 | |
|    return false;
 | |
| }
 | |
| */ | 
