Skip to content

Commit 889e6aa

Browse files
committed
Update NES palette generator, bugfixes and code refractor
1 parent c3ecf7f commit 889e6aa

33 files changed

+710
-527
lines changed

callback_gui.cpp

+9-9
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,12 @@ Fl_Menu_Item subSysGenesis[]={
5555
{0}
5656
};
5757
void set_game_system(Fl_Widget*,void* selection){
58-
unsigned sel=(uintptr_t)selection;
58+
gameSystemEnum sel=(gameSystemEnum)(intptr_t)selection;
5959
if(unlikely(sel == currentProject->gameSystem)){
6060
fl_alert("You are already in that mode");
6161
return;
6262
}
63-
uint32_t gold=currentProject->gameSystem;
63+
gameSystemEnum gold=currentProject->gameSystem;
6464
uint32_t sold=currentProject->subSystem;
6565
unsigned bd=getBitdepthcurSys();
6666
unsigned bdold=bd;
@@ -69,7 +69,7 @@ void set_game_system(Fl_Widget*,void* selection){
6969
tilesOld=new tiles(*currentProject->tileC);
7070
if(containsDataCurProj(pjHavePal)){
7171
switch(sel){
72-
case sega_genesis:
72+
case segaGenesis:
7373
if(currentProject->gameSystem==NES){
7474
uint8_t rgbTmp[32*3];
7575
uint8_t palTypeTmp[32];
@@ -92,7 +92,7 @@ void set_game_system(Fl_Widget*,void* selection){
9292
fl_alert("TODO");
9393
break;
9494
case NES:
95-
if(currentProject->gameSystem==sega_genesis){
95+
if(currentProject->gameSystem==segaGenesis){
9696
sortBy(2,true);
9797
uint8_t rgbTmp[64*3];
9898
memcpy(rgbTmp,currentProject->pal->rgbPal,64*3);
@@ -138,9 +138,9 @@ void set_game_system(Fl_Widget*,void* selection){
138138
palBar.updateSliders();
139139
}
140140
switch(sel){
141-
case sega_genesis:
141+
case segaGenesis:
142142
bd=4;
143-
currentProject->gameSystem=sega_genesis;
143+
currentProject->gameSystem=segaGenesis;
144144
currentProject->subSystem=0;
145145
setBitdepthcurSys(bd);
146146
if(containsDataCurProj(pjHaveTiles)){
@@ -188,8 +188,8 @@ void set_game_system(Fl_Widget*,void* selection){
188188
window->subSysC->copy(subSysNES);
189189
window->subSysC->value(currentProject->subSystem&NES2x2);
190190
break;
191-
case frameBuffer_pal:
192-
{currentProject->gameSystem=frameBuffer_pal;
191+
case frameBufferPal:
192+
{currentProject->gameSystem=frameBufferPal;
193193
currentProject->subSystem=0;
194194
if(bd>8)
195195
bd=8;
@@ -207,7 +207,7 @@ void set_game_system(Fl_Widget*,void* selection){
207207
}
208208
}
209209
if(containsDataCurProj(pjHaveTiles)){
210-
uint32_t gnew=currentProject->gameSystem;
210+
gameSystemEnum gnew=currentProject->gameSystem;
211211
uint32_t snew=currentProject->subSystem;
212212
for(unsigned i=0;i<tilesOld->amt;++i){
213213
for(unsigned y=0;y<std::min(currentProject->tileC->sizeh,tilesOld->sizeh);++y){

callback_tilemap.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,7 @@ void tilemap_remove_callback(Fl_Widget*,void*){
412412
window->damage(FL_DAMAGE_USER1);
413413
}
414414
void shadow_highligh_findout(Fl_Widget*,void*){
415-
if (unlikely(currentProject->gameSystem != sega_genesis)){
415+
if (unlikely(currentProject->gameSystem != segaGenesis)){
416416
fl_alert("Only the Sega Genesis/Mega Drive supports shadow highlight mode\n");
417417
return;
418418
}

callback_tiles.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ void fill_tile(Fl_Widget* o, void*){
168168
color=palBar.selBox[2];
169169
uint8_t * tile_ptr_temp;
170170
switch (currentProject->gameSystem){
171-
case sega_genesis:
171+
case segaGenesis:
172172
tile_ptr_temp = &currentProject->tileC->tDat[currentProject->tileC->current_tile*32];
173173
color|=color<<4;
174174
memset(tile_ptr_temp,color,32);

callbacks_palette.cpp

+24-46
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,7 @@ void sortRowbyCB(Fl_Widget*,void*){
3030
}
3131
void save_palette(Fl_Widget*, void* start_end){
3232
char temp[4];
33-
switch (currentProject->gameSystem){
34-
case sega_genesis:
35-
strcpy(temp,"63");
36-
break;
37-
case NES:
38-
strcpy(temp,"15");
39-
break;
40-
default:
41-
show_default_error
42-
}
33+
snprintf(temp,4,"%u",currentProject->pal->colorCnt-1);
4334
char * returned=(char *)fl_input("Counting from zero enter the first entry that you want saved\nFor NES to save the sprite palette the first entry is 16","0");
4435
if(!returned)
4536
return;
@@ -94,13 +85,9 @@ void save_palette(Fl_Widget*, void* start_end){
9485
if (type){
9586
char comment[512];
9687
snprintf(comment,512,"Colors %d-%d",start,end-1);
97-
int bits;
98-
if(currentProject->gameSystem==sega_genesis){
99-
start*=2;//Be sure to keep this in sync with the other if statement shortly below
100-
end*=2;
101-
bits=16;
102-
}else
103-
bits=8;
88+
int bits=currentProject->pal->esize*8;;
89+
start*=currentProject->pal->esize;
90+
end*=currentProject->pal->esize;
10491
if(skipzero){
10592
if (!saveBinAsText(bufskip,szskip,myfile,type,comment,"palDat",bits)){
10693
fl_alert("Error: can not save file %s",the_file.c_str());
@@ -113,10 +100,8 @@ void save_palette(Fl_Widget*, void* start_end){
113100
}
114101
}
115102
}else{
116-
if(currentProject->gameSystem==sega_genesis){
117-
start*=2;
118-
end*=2;
119-
}
103+
start*=currentProject->pal->esize;
104+
end*=currentProject->pal->esize;
120105
if(skipzero){
121106
if (fwrite(bufskip,1,szskip,myfile)==0){
122107
fl_alert("Error: can not save file %s",the_file.c_str());
@@ -147,37 +132,37 @@ void update_palette(Fl_Widget* o, void* v){
147132
pushed_g=0;
148133
pushPaletteEntry(temp_entry);
149134
}
150-
if (currentProject->gameSystem == sega_genesis){
135+
if (currentProject->gameSystem == segaGenesis){
151136
unsigned temp_var=0;
152-
unsigned temp2=(unsigned)s->value()*2;
137+
unsigned temp2=(unsigned)s->value();
153138
switch ((uintptr_t)v){
154139
case 0://red
155140
temp_var=currentProject->pal->palDat[(temp_entry*2)+1];//get the green value we need to save it for later
156141
temp_var&=0xF0;
157-
temp_var|=temp2;
142+
temp_var|=temp2<<1;
158143
currentProject->pal->palDat[(temp_entry*2)+1]=temp_var;
159144
//now convert the new red value
160-
currentProject->pal->rgbPal[temp_entry*3]=palTab[(temp2>>1)+palTypeGen];
145+
currentProject->pal->rgbPal[temp_entry*3]=palTab[temp2+palTypeGen];
161146
break;
162147
case 1://green
163148
//this is very similar to what I just did above
164149
temp_var=currentProject->pal->palDat[(temp_entry*2)+1];
165150
temp_var&=15;//get only the red value
166151
//now OR the new green value to it
167-
temp_var|=temp2<<4;
152+
temp_var|=temp2<<5;
168153
currentProject->pal->palDat[(temp_entry*2)+1]=temp_var;
169154
//now convert the new green value
170-
currentProject->pal->rgbPal[(temp_entry*3)+1]=palTab[(temp2>>1)+palTypeGen];
155+
currentProject->pal->rgbPal[(temp_entry*3)+1]=palTab[temp2+palTypeGen];
171156
break;
172157
case 2:
173158
//blue is the most trivial conversion to do
174-
currentProject->pal->palDat[temp_entry*2]=temp2;
175-
currentProject->pal->rgbPal[(temp_entry*3)+2]=palTab[(temp2>>1)+palTypeGen];
159+
currentProject->pal->palDat[temp_entry*2]=temp2<<1;
160+
currentProject->pal->rgbPal[(temp_entry*3)+2]=palTab[temp2+palTypeGen];
176161
break;
177162
}
178163
}
179164
else if (currentProject->gameSystem == NES){
180-
uint8_t pal;
165+
unsigned pal;
181166
uint32_t rgb_out;
182167
switch ((uintptr_t)v){
183168
/*
@@ -191,16 +176,16 @@ void update_palette(Fl_Widget* o, void* v){
191176
//first read out value
192177
pal=currentProject->pal->palDat[temp_entry];
193178
pal&=48;
194-
pal|=(uint8_t)s->value();
179+
pal|=(unsigned)s->value();
195180
break;
196181
case 1://Value
197182
pal=currentProject->pal->palDat[temp_entry];
198183
pal&=15;
199-
pal|=((uint8_t)s->value())<<4;
184+
pal|=((unsigned)s->value())<<4;
200185
break;
201186
}
202187
currentProject->pal->palDat[temp_entry]=pal;
203-
rgb_out=MakeRGBcolor(pal);
188+
rgb_out=nesPalToRgb(pal);
204189
currentProject->pal->rgbPal[temp_entry*3+2]=rgb_out&255;//blue
205190
currentProject->pal->rgbPal[temp_entry*3+1]=(rgb_out>>8)&255;//green
206191
currentProject->pal->rgbPal[temp_entry*3]=(rgb_out>>16)&255;//red
@@ -211,31 +196,24 @@ void update_palette(Fl_Widget* o, void* v){
211196
}
212197
void loadPalette(Fl_Widget*, void*){
213198
uint32_t file_size;
214-
uint8_t offset;
199+
unsigned offset;
215200
char * inputTemp=(char *)fl_input("Counting from zero enter the first entry that you want the palette to start at\nFor NES to load a sprite palette enter 16 or greater","0");
216201
if (!inputTemp)
217202
return;
218203
if (!verify_str_number_only(inputTemp))
219204
return;
220205
offset=atoi(inputTemp);
221-
uint8_t palSize;
222-
switch (currentProject->gameSystem){
223-
case sega_genesis:
224-
offset*=2;
225-
palSize=128;
226-
break;
227-
case NES:
228-
palSize=32;
229-
break;
230-
}
206+
unsigned palSize=currentProject->pal->colorCnt+currentProject->pal->colorCntalt;
207+
palSize*=currentProject->pal->esize;
208+
offset*=currentProject->pal->esize;
231209
if(load_file_generic("Load palette") == true){
232210
FILE * fi=fopen(the_file.c_str(), "rb");
233211
if(fi){
234212
//copy 32 bytes to the palette buffer
235213
fseek(fi,0,SEEK_END);
236214
file_size = ftell(fi);
237215
if (file_size > palSize-offset){
238-
fl_alert("Error: The file size is bigger than %d (%d-%d) bytes\nMaybe there is extra data or you loaded the wrong file?",palSize-offset,palSize,offset);
216+
fl_alert("Error: The file size is bigger than %d (%d-%d) bytes\nMaybe there is extra data or you loaded the wrong file?\n",palSize-offset,palSize,offset);
239217
fclose(fi);
240218
return;//end function due to errors
241219
}
@@ -245,7 +223,7 @@ void loadPalette(Fl_Widget*, void*){
245223
fclose(fi);
246224
//now convert each value to rgb
247225
switch (currentProject->gameSystem){
248-
case sega_genesis:
226+
case segaGenesis:
249227
set_palette_type();
250228
break;
251229
case NES:

classSprites.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ bool sprites::recttoSprite(int x0,int x1,int y0,int y1,int where,Fl_Shared_Image
300300
unsigned depth=loaded_image->d();
301301
unsigned wmax,hmax;
302302
switch(currentProject->gameSystem){
303-
case sega_genesis:
303+
case segaGenesis:
304304
wmax=hmax=32;
305305
break;
306306
case NES:

class_global.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
Copyright Sega16 (or whatever you wish to call me) (2012-2014)
1616
*/
1717
#pragma once
18+
#include "system.h"
1819
#include "project.h"
1920
#include <inttypes.h>
2021
extern int pushed_g;
@@ -82,7 +83,7 @@ class editor : public Fl_Double_Window{
8283
Fl_Tabs* the_tabs;
8384
Fl_Round_Button* palType[9];
8485
Fl_Round_Button* GameSys[2];
85-
Fl_Round_Button* palRTE[12];
86+
Fl_Round_Button* palRTE[MAX_ROWS_PALETTE*2];
8687
Fl_Check_Button* hflipCB[2];
8788
Fl_Check_Button* vflipCB[2];
8889
Fl_Check_Button* prioCB[2];

0 commit comments

Comments
 (0)