123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- #include <pokeagb/pokeagb.h>
- #include <agb_debug.h>
- #include <dns.h>
- #include <rtc.h>
-
- #define DNS_BUF_SIZE 256
- #define DNS_SEC_PAL_START 224
- #define DNS_SEC_PAL_START_C (DNS_SEC_PAL_START / 2)
-
- #define crgb5(r,g,b) (union Color)(((u16)(((b) << 10) | ((g)<<5) | ((r)))))
- #define rgb82rgb5(r,g,b) (crgb5(r/8, g/8, b/8))
-
- const union Color dns_color_times[5] = {
- rgb82rgb5(70, 70, 196),
- rgb82rgb5(70, 70, 196),
- rgb82rgb5(70, 70, 196),
- rgb82rgb5(70, 70, 196),
- rgb82rgb5(70, 70, 196)
- };
-
- union Color dns_color_multiply(union Color a, union Color b);
-
-
- void dns_blockset_load_palette(struct MapBlockset* blockset, u16 offset, u16 size){
- //struct RtcTimestamp stamp;
- //rtc_get_time(&stamp);
- //dprintf("rtc data was read: %x.%x.%x\n", stamp.day, stamp.month, stamp.year);
- if(blockset != NULL){
- union Color *dns_buffer = malloc(DNS_BUF_SIZE*2);
- if(blockset->secondary > 0)
- {
- if(blockset->secondary == 1)
- {
- //load secondary palette uncompressed
- memcpy(dns_buffer, blockset->palettes+DNS_SEC_PAL_START, size);
- dns_modify_palette(dns_buffer, size/2);
- gpu_pal_apply(dns_buffer, offset,size);
- load_palette3(offset, size/2);
- }
- else
- {
- //load secondary palette compressed
- LZ77UnCompWram(blockset->palettes, dns_buffer);
-
- dns_modify_palette(&dns_buffer[DNS_SEC_PAL_START_C], size/2);
-
- gpu_pal_apply(&dns_buffer[DNS_SEC_PAL_START_C], offset, size);
- load_palette3(offset,size/2);
-
- }
- }
- else
- {
- union Color black;
- black.packed = 0x0000;
- gpu_pal_apply(&black, 0, 2);
- memcpy(dns_buffer, blockset->palettes, size);
- dns_modify_palette(dns_buffer, size/2);
- gpu_pal_apply(&dns_buffer[1], offset+1, size-2);
- load_palette3(offset+1, (size-2)/2);
- //load primary palette
-
- }
- free(dns_buffer);
- }
- }
-
- void dns_oec01_load_pal_impl(u32 *oe_script) {
- struct SpritePalette *pal = (struct SpritePalette *)oe_read_word(oe_script);
- struct SpritePalette palToApply = {
- .data = NULL,
- .tag = pal->tag
- };
- u8 idx = gpu_pal_tags_index_of(palToApply.tag);
-
- union Color *buffer = malloc(32);
- memcpy(buffer, pal->data, 32);
- dns_modify_palette(buffer, 16);
- palToApply.data = buffer;
-
- gpu_pal_obj_alloc_tag_and_apply(&palToApply);
- if(idx == 0xFF) {
- u8 idx = gpu_pal_tags_index_of(palToApply.tag);
- tint_palette_switch(idx);
- }
- idx = gpu_pal_tags_index_of(palToApply.tag);
- free(buffer);
- palette_obj_807AA8C(idx);
- *oe_script += 4;
- }
-
- void dns_oec02_load_pal_impl(u32 *oe_script) {
- struct SpritePalette *pal = (struct SpritePalette *)oe_read_word(oe_script);
- struct SpritePalette palToApply = {
- .data = NULL,
- .tag = pal->tag
- };
- u8 idx = gpu_pal_tags_index_of(palToApply.tag);
-
- union Color *buffer = malloc(32);
- memcpy(buffer, pal->data, 32);
- dns_modify_palette(buffer, 16);
- palToApply.data = buffer;
-
- gpu_pal_obj_alloc_tag_and_apply(&palToApply);
- if(idx == 0xFF) {
- u8 idx = gpu_pal_tags_index_of(palToApply.tag);
- tint_palette_switch(idx);
- }
- free(buffer);
- *oe_script += 4;
- }
-
- void dns_pal_patch_for_npc(u16 tag, u8 idx)
- {
- extern struct SpritePalette ow_pal_table[1100];
- u16 npcPalIdx = hacked_npc_pal_idx_for_given_tag(tag);
- union Color *buffer = malloc(32);
- memcpy(buffer, ow_pal_table[npcPalIdx].data,32);
- dns_modify_palette(buffer,16);
- gpu_pal_apply(buffer, 256 + 16*idx, 32);
- free(buffer);
- tint_palette_switch(idx);
- }
-
- void dns_modify_palette(union Color* buffer, u16 size){
- /* if(current_map_header.light == 8)
- return;
- for(u16 i = 0; i < size; ++i) {
- buffer[i] = dns_color_multiply(dns_color_times[0], buffer[i]);
- }*/
- }
-
- union Color dns_color_multiply(union Color a, union Color b) {
- u32 red = (a.components.r * b.components.r) / 31;
- u32 green = (a.components.g * b.components.g) / 31;
- u32 blue = (a.components.b * b.components.b) / 31;
- return crgb5(red,green,blue);
- }
|