summaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2012-05-24 18:53:50 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2012-05-24 18:53:50 (GMT)
commit8196d2a645d386b5c97134c446e959e5e50a345b (patch)
tree33e729715a6122fa5b8dac6f9abf7b784bfbfbc3 /src/main.c
parent5a117c2d27f513942d7621980a79d357af122ba4 (diff)
parent1fb778724329782bb5616da032742dce4dbea131 (diff)
downloadpowder-8196d2a645d386b5c97134c446e959e5e50a345b.zip
powder-8196d2a645d386b5c97134c446e959e5e50a345b.tar.gz
Merge pull request #66 from jacob1/Modstuff
Code structure improvements for graphics/drawing, improvements to prevent accidental infinite loops in Lua, Fixes for fusion, improvements for VOID types. And other minor improvements
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c118
1 files changed, 29 insertions, 89 deletions
diff --git a/src/main.c b/src/main.c
index 4cbef1c..224dfb6 100644
--- a/src/main.c
+++ b/src/main.c
@@ -151,7 +151,7 @@ static const char *it_msg =
"\n"
"Contributors: \bgStanislaw K Skowronek (\brhttp://powder.unaligned.org\bg, \bbirc.unaligned.org #wtf\bg),\n"
"\bgSimon Robertshaw, Skresanov Savely, cracker64, Catelite, Bryan Hoyle, Nathan Cousins, jacksonmj,\n"
- "\bgLieuwe Mosch, Anthony Boot, Matthew \"me4502\", MaksProg\n"
+ "\bgLieuwe Mosch, Anthony Boot, Matthew \"me4502\", MaksProg, jacob1\n"
"\n"
"\bgTo use online features such as saving, you need to register at: \brhttp://powdertoy.co.uk/Register.html\n"
"\n"
@@ -221,6 +221,7 @@ int frameidx = 0;
//int CGOL = 0;
//int GSPEED = 1;//causes my .exe to crash..
int sound_enable = 0;
+int loop_time = 0;
int debug_flags = 0;
int debug_perf_istart = 1;
@@ -755,7 +756,7 @@ int main(int argc, char *argv[])
void *http_ver_check, *http_session_check = NULL;
char *ver_data=NULL, *check_data=NULL, *tmp;
//char console_error[255] = "";
- int result, i, j, bq, bc = 0, fire_fc=0, do_check=0, do_s_check=0, old_version=0, http_ret=0,http_s_ret=0, major, minor, buildnum, is_beta = 0, old_ver_len, new_message_len=0;
+ int result, i, j, bq, bc = 0, do_check=0, do_s_check=0, old_version=0, http_ret=0,http_s_ret=0, major, minor, buildnum, is_beta = 0, old_ver_len, new_message_len=0;
#ifdef INTERNAL
int vs = 0;
#endif
@@ -770,6 +771,7 @@ int main(int argc, char *argv[])
unsigned int rgbSave = PIXRGB(127,0,0);
SDL_AudioSpec fmt;
int username_flash = 0, username_flash_t = 1;
+ int saveOpenError = 0;
#ifdef PTW32_STATIC_LIB
pthread_win32_process_attach_np();
pthread_win32_thread_attach_np();
@@ -779,7 +781,6 @@ int main(int argc, char *argv[])
part_vbuf = calloc((XRES+BARSIZE)*(YRES+MENUSIZE), PIXELSIZE); //Extra video buffer
part_vbuf_store = part_vbuf;
pers_bg = calloc((XRES+BARSIZE)*YRES, PIXELSIZE);
- int saveOpenError = 0;
gravity_init();
GSPEED = 1;
@@ -902,12 +903,12 @@ int main(int argc, char *argv[])
}
else if (!strncmp(argv[i], "ptsave", 7) && i+1<argc)
{
- puts("Got ptsave");
int ci = 0, ns = 0, okay = 0;
char * tempString = argv[i+1];
int tempStringLength = strlen(argv[i+1])-7;
int tempSaveID = 0;
char tempNumberString[32];
+ puts("Got ptsave");
i++;
tempNumberString[31] = 0;
tempNumberString[0] = 0;
@@ -1002,54 +1003,12 @@ int main(int argc, char *argv[])
update_airh();
}
-#ifdef OGLR
- part_vbuf = vid_buf;
-#else
- if(ngrav_enable && display_mode & DISPLAY_WARP)
- {
- part_vbuf = part_vbuf_store;
- memset(vid_buf, 0, (XRES+BARSIZE)*YRES*PIXELSIZE);
- } else {
- part_vbuf = vid_buf;
- }
-#endif
-
if(gravwl_timeout)
{
if(gravwl_timeout==1)
gravity_mask();
gravwl_timeout--;
}
-#ifdef OGLR
- if (display_mode & DISPLAY_PERS)//save background for persistent, then clear
- {
- clearScreen(0.01f);
- memset(part_vbuf, 0, (XRES+BARSIZE)*YRES*PIXELSIZE);
- }
- else //clear screen every frame
- {
- clearScreen(1.0f);
- memset(part_vbuf, 0, (XRES+BARSIZE)*YRES*PIXELSIZE);
- if (display_mode & DISPLAY_AIR)//air only gets drawn in these modes
- {
- draw_air(part_vbuf);
- }
- }
-#else
- if (display_mode & DISPLAY_AIR)//air only gets drawn in these modes
- {
- draw_air(part_vbuf);
- }
- else if (display_mode & DISPLAY_PERS)//save background for persistent, then clear
- {
- memcpy(part_vbuf, pers_bg, (XRES+BARSIZE)*YRES*PIXELSIZE);
- memset(part_vbuf+((XRES+BARSIZE)*YRES), 0, ((XRES+BARSIZE)*YRES*PIXELSIZE)-((XRES+BARSIZE)*YRES*PIXELSIZE));
- }
- else //clear screen every frame
- {
- memset(part_vbuf, 0, (XRES+BARSIZE)*YRES*PIXELSIZE);
- }
-#endif
//Can't be too sure (Limit the cursor size)
if (bsx>1180)
@@ -1067,10 +1026,19 @@ int main(int argc, char *argv[])
sandcolour_b = sandcolour_r = sandcolour_g = (int)(20.0f*sin((float)sandcolour_frame*(M_PI/180.0f)));
sandcolour_frame++;
sandcolour_frame%=360;
-
- if(ngrav_enable && drawgrav_enable)
- draw_grav(vid_buf);
- draw_walls(part_vbuf);
+
+#ifdef OGLR
+ part_vbuf = vid_buf;
+#else
+ if(ngrav_enable && (display_mode & DISPLAY_WARP))
+ {
+ part_vbuf = part_vbuf_store;
+ memset(vid_buf, 0, (XRES+BARSIZE)*YRES*PIXELSIZE);
+ } else {
+ part_vbuf = vid_buf;
+ }
+#endif
+ render_before(part_vbuf);
if(debug_flags & (DEBUG_PERFORMANCE_CALC|DEBUG_PERFORMANCE_FRAME))
{
@@ -1099,8 +1067,9 @@ int main(int argc, char *argv[])
#endif
}
- render_parts(part_vbuf); //draw particles
- draw_other(part_vbuf);
+ render_after(part_vbuf, vid_buf);
+ if(su == WL_GRAV+100)
+ draw_grav_zones(part_vbuf);
if(debug_flags & (DEBUG_PERFORMANCE_CALC|DEBUG_PERFORMANCE_FRAME))
{
@@ -1118,9 +1087,6 @@ int main(int argc, char *argv[])
debug_perf_istart %= DEBUG_PERF_FRAMECOUNT;
}
- if(sl == WL_GRAV+100 || sr == WL_GRAV+100)
- draw_grav_zones(part_vbuf);
-
gravity_update_async(); //Check for updated velocity maps from gravity thread
if (!sys_pause||framerender) //Only update if not paused
memset(gravmap, 0, (XRES/CELL)*(YRES/CELL)*sizeof(float)); //Clear the old gravmap
@@ -1130,31 +1096,6 @@ int main(int argc, char *argv[])
sys_pause = 1;
}
- if (display_mode & DISPLAY_PERS)
- {
- if (!fire_fc)//fire_fc has nothing to do with fire... it is a counter for diminishing persistent view every 3 frames
- {
- dim_copy_pers(pers_bg, vid_buf);
- }
- else
- {
- memcpy(pers_bg, vid_buf, (XRES+BARSIZE)*YRES*PIXELSIZE);
- }
- fire_fc = (fire_fc+1) % 3;
- }
-
-#ifndef OGLR
- if (render_mode & FIREMODE)
- render_fire(part_vbuf);
-#endif
-
- render_signs(part_vbuf);
-
-#ifndef OGLR
- if(ngrav_enable && display_mode & DISPLAY_WARP)
- render_gravlensing(part_vbuf, vid_buf);
-#endif
-
memset(vid_buf+((XRES+BARSIZE)*YRES), 0, (PIXELSIZE*(XRES+BARSIZE))*MENUSIZE);//clear menu areas
clearrect(vid_buf, XRES-1, 0, BARSIZE+1, YRES);
@@ -1553,9 +1494,8 @@ int main(int argc, char *argv[])
}
else
{
- rgbSave = decorations_ui(vid_buf,&bsx,&bsy,rgbSave);//decoration_mode = !decoration_mode;
decorations_enable = 1;
- sys_pause=1;
+ rgbSave = decorations_ui(vid_buf,&bsx,&bsy,rgbSave);//decoration_mode = !decoration_mode;
}
}
if (sdl_key=='g')
@@ -1590,8 +1530,13 @@ int main(int argc, char *argv[])
for (i=0; i<NPART; i++)
if (parts[i].type==PT_SPRK)
{
- parts[i].type = parts[i].ctype;
- parts[i].life = 0;
+ if (parts[i].ctype >= 0 && parts[i].ctype < PT_NUM)
+ {
+ parts[i].type = parts[i].ctype;
+ parts[i].life = 0;
+ }
+ else
+ kill_part(i);
}
}
else
@@ -2807,8 +2752,6 @@ int main(int argc, char *argv[])
break;
}
free(console);
- if (!console_mode)
- hud_enable = 1;
#else
char *console;
sys_pause = 1;
@@ -2821,12 +2764,9 @@ int main(int argc, char *argv[])
break;
}
free(console);
- if (!console_mode)
- hud_enable = 1;
#endif
}
- //execute python step hook
sdl_blit(0, 0, XRES+BARSIZE, YRES+MENUSIZE, vid_buf, XRES+BARSIZE);
//Setting an element for the stick man