123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
-
-
-
-
- #include <pokeagb/pokeagb.h>
-
- #define TRAINER_FLAG_SPACE_START 0x1000
-
- extern u16 tb_modify_flag_id(u16 flag_id);
- u16 trainerflag_fix_difficulty(u16 flag_id);
-
- u16 load_hword(void* ptr)
- {
- u8* to_load = (u8*)ptr;
- u16 result = *to_load;
- u16 result2 = *(to_load+1) << 8;
- return result | result2;
- }
-
- u8 load_byte(void* ptr)
- {
- return (u8) (*((u8*)ptr));
- }
-
- u16 trainerflag_fix_difficulty(u16 flag_id)
- {
- u16 new_flag = ((flag_id - TRAINER_FLAG_SPACE_START + 1) / 3) + TRAINER_FLAG_SPACE_START;
- dprintf("trainerflag_fix_difficulty;; flag_id: 0x%x, reduced: 0x%x, status: %s\n", flag_id, new_flag, flag_check(new_flag) ? "true" : "false");
- return new_flag;
- }
-
- bool trainer_check_flag_on_spot(u8 npc_id)
- {
- void* script = npc_get_script_by_npc_id(npc_id);
-
-
- u16 flag = tb_modify_flag_id(load_hword(script+2));
-
-
- u8 hit_result = npc_trainer_and_raycast_hit(&npc_states[npc_id]);
-
- if(hit_result == 0)
- return false;
-
- if(flag_check(trainerflag_fix_difficulty(flag + TRAINER_FLAG_SPACE_START)))
- return false;
-
- if((load_byte(script + 1) == 4) && (player_cant_double_battle() > 0))
- return false;
-
- spot_trainer_8080334(npc_id, script);
- spot_trainer_8081E68(&npc_states[npc_id], hit_result -1);
- return true;
-
- }
-
- u8 trainerflag_read_fix(void* script_location)
- {
- script_location+=2;
- u16 flag = load_hword(script_location);
-
- flag = trainerflag_fix_difficulty(flag + TRAINER_FLAG_SPACE_START);
- return flag_check(flag);
- }
-
- volatile u8 test;
-
- u16 trainerflag_opponent_fix(void)
- {
- return trainerflag_fix_difficulty(trainerbattle_flag_id + TRAINER_FLAG_SPACE_START);
- }
-
- bool trainerflag_check_fix(u16 flag)
- {
- return flag_check(trainerflag_fix_difficulty(flag + TRAINER_FLAG_SPACE_START));
- }
-
- void trainerflag_set_fix(u16 flag)
- {
- flag_set(trainerflag_fix_difficulty(flag + TRAINER_FLAG_SPACE_START));
- }
-
- void trainerflag_clear_fix(u16 flag)
- {
- flag_clear(trainerflag_fix_difficulty(flag + TRAINER_FLAG_SPACE_START));
- }
-
- void flag_set(u16 flag)
- {
- u8* addr = flag_byte_access(flag);
- if(addr != NULL)
- *addr |= 1 << (flag & 7);
- }
|