///////////////////////////////////////// // M A I N // int main(int argc, char **argv) { srand(time(NULL)); mouse_x = 0; old_mouse_x = 0; mouse_y = 0; old_mouse_y = 0; m_angle = -300*M_PI; //FOULHACK! glutInit(&argc, argv); initKeymapManager(); glutPassiveMotionFunc(mouse); //glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GL_MULTISAMPLE); glutInitWindowSize(800, 600); glutInitContextVersion(3, 2); // Might not be needed in Linux glutCreateWindow("Farm Escape"); glutDisplayFunc(DisplayWindow); create_floor(&f); //create_plank(&p, SetVector(4,4,0), SetVector(0,5,0)); create_fence(&ff, 14, SetVector(0,0,0)); //f.model = generate_terrain(32); create_ball(&ball, SetVector(5,0,0)); create_wall(&wall, SetVector(0,10,0), SetVector(2,5,2)); create_joint(&legbase_joint[0], SetVector(-2.2, 3.8, .7), "legjoint0", "legcurrpos0", "legbonepos0", 0); create_joint(&legbase_joint[1], SetVector(-2.2, 3.8, -.7), "legjoint1", "legcurrpos1", "legbonepos1", 0); create_joint(&legbase_joint[2], SetVector(.2, 3.9, -.7), "legjoint2", "legcurrpos2", "legbonepos2", 0); create_joint(&legbase_joint[3], SetVector(.2, 3.9, .7), "legjoint3", "legcurrpos3", "legbonepos3", 0); create_joint(&thigh_joint[0], SetVector(-2.3, 1.8, .4), NULL, NULL, NULL, 0); create_joint(&thigh_joint[1], SetVector(-2.3, 1.8, -.4), NULL, NULL, NULL, 0); create_joint(&thigh_joint[2], SetVector(.1, 2, -.4), NULL, NULL, NULL, 0); create_joint(&thigh_joint[3], SetVector(.1, 2.0, .4), NULL, NULL, NULL, 0); create_joint(&knee_joint[0], SetVector(-2.6, .9, .4), NULL, NULL, NULL, 0); create_joint(&knee_joint[1], SetVector(-2.6, .9, -.4), NULL, NULL, NULL, 0); create_joint(&knee_joint[2], SetVector(.4, .9, -.4), NULL, NULL, NULL, 0); create_joint(&knee_joint[3], SetVector(.4, .9, .4), NULL, NULL, NULL, 0); create_joint(&foot_joint[0], SetVector(-2.75, 0, .4), NULL, NULL, NULL, 0); create_joint(&foot_joint[1], SetVector(-2.75, 0, -.4), NULL, NULL, NULL, 0); create_joint(&foot_joint[2], SetVector(.34, 0, -.4), NULL, NULL, NULL, 0); create_joint(&foot_joint[3], SetVector(.34, 0, .4), NULL, NULL, NULL, 0); //BODY JOINTS create_joint(&body_joint[0], SetVector(-1.8, 3.6, 0), "bodyjoint", "bodycurrpos", "bodybonepos", 0); create_joint(&body_joint[1], SetVector(-1, 3.3, 0), NULL, NULL, NULL, 0); create_joint(&body_joint[2], SetVector(.14, 3.9, 0), NULL, NULL, NULL, 0); //TAIL JOINTS create_joint(&tail_joint[0], SetVector(.7+.3, 3.75, 0), "tailjoint", "tailcurrpos", "tailbonepos", 0); create_joint(&tail_joint[1], SetVector(2.2, 3.8, 0), NULL, NULL, NULL, 0); create_joint(&tail_joint[2], SetVector(3.0, 3.75, 0), NULL, NULL, NULL, 0); create_joint(&tail_joint[3], SetVector(3.9, 3.65, 0), NULL, NULL, NULL, 0); //HEAD JOINTS create_joint(&head_joint[0], SetVector(-2.9, 3.2, 0), "headjoint", "headcurrpos", "headbonepos", 0); create_joint(&head_joint[1], SetVector(-3.85, 4, 0), NULL, NULL, NULL, 0); create_joint(&head_joint[2], SetVector(-4.7, 3, 0), NULL, NULL, NULL, 0); //EAR JOINTS //create_joint(&left_ear_joint[0], SetVector(-2.9, 3.2, -.4), //"leftearjoint", "leftearcurrpos", "leftearbonepos", 0); create_joint(&left_ear_joint[0], SetVector(-2.9, 3.2, .6), NULL, NULL, NULL, 0); create_joint(&right_ear_joint[0], SetVector(-2.9, 3.2, -.6), NULL, NULL, NULL, 0); //create_joint(&left_ear_joint[1], SetVector(-2.9, 3.2, .6), //NULL, NULL, NULL, 0); //create_joint(&right_ear_joint[1], SetVector(-2.9, 3.2, -.6), //NULL, NULL, NULL, 0); //create_joint(&right_ear_joint[0], SetVector(-2.9, 3.2, -.6), //"rightearjoint", "rightearcurrpos", "rightearbonepos", 0); //create_joint(&right_ear_joint[1], SetVector(-2.9, 3.2, -.8), //"rightearjoint", "rightearcurrpos", "rightearbonepos", 0); //SET CHILDREN! body_joint[0].child[0] = &body_joint[1]; body_joint[1].child[0] = &body_joint[2]; body_joint[2].child[0] = &tail_joint[0]; body_joint[2].child[1] = &legbase_joint[2]; body_joint[2].child[2] = &legbase_joint[3]; tail_joint[0].child[0] = &tail_joint[1]; tail_joint[1].child[0] = &tail_joint[2]; tail_joint[2].child[0] = &tail_joint[3]; tail_joint[3].child[0] = NULL; head_joint[0].child[0] = &head_joint[1]; head_joint[1].child[0] = &head_joint[2]; head_joint[2].child[0] = NULL; //head_joint[2].child[0] = &right_ear_joint[1]; head_joint[2].child[1] = &left_ear_joint[0]; head_joint[2].child[2] = &right_ear_joint[0]; //left_ear_joint[0].child[0] = &left_ear_joint[1]; //right_ear_joint[0].child[0] = &right_ear_joint[1]; //left_ear_joint[1].child[0] = NULL; //right_ear_joint[1].child[0] = NULL; //head_joint[0].child = &legbase_joint[0]; int i; for(i=0;i<4;i++) { legbase_joint[i].child[0] = &thigh_joint[i]; thigh_joint[i].child[0] = &knee_joint[i]; knee_joint[i].child[0] = &foot_joint[i]; foot_joint[i].child[0] = NULL; } //SET PARENTS legbase_joint[2].parent = &body_joint[2]; legbase_joint[3].parent = &body_joint[2]; //left_ear_joint[1].parent = &left_ear_joint[0]; left_ear_joint[0].parent = &head_joint[2]; //right_ear_joint[1].parent = &right_ear_joint[0]; right_ear_joint[0].parent = &head_joint[2]; create_cow(&cow); create_farmer(&farmer, SetVector(0,0,0)); create_ragdoll(&ragdoll); g_shader = loadShaders("shader.vert" , "shader.frag"); glUseProgram(g_shader); // Set up depth buffer glEnable(GL_DEPTH_TEST); //glEnable (GL_BLEND); //glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // initiering //#ifdef WIN32 // glewInit(); //#endif //glutSetCursor(0); //terr = generate_terrain(512); glutTimerFunc(20, &OnTimer, 0); glutMainLoop(); exit(0); }
void lab5_item(int in, int cn) { struct lab5_player_data *pd; char *drdata,dx,dy; int in2; drdata=it[in].drdata; if (!numchestboxes) count_chestboxes(); if (!cn) { // fireface if (drdata[0]==2) { if (it[in].sprite==11135) { dx=1; dy=0; } else if (it[in].sprite==11136) { dx=0; dy=-1; } else if (it[in].sprite==11137) { dx=-1; dy=0; } else /*if (it[in].sprite==11138)*/ { dx=0; dy=1; } create_fireball(0,it[in].x+dx,it[in].y+dy,it[in].x+dx+dx,it[in].y+dy+dy,50); if (drdata[1]==0) { drdata[1]=1; call_item(it[in].driver,in,0,ticker+(((it[in].x+it[in].y)%17)+1)*TICKS); } else call_item(it[in].driver,in,0,ticker+5*TICKS); } // lightface if (drdata[0]==13) { if (it[in].sprite==11135) { dx=1; dy=0; } else if (it[in].sprite==11136) { dx=0; dy=-1; } else if (it[in].sprite==11137) { dx=-1; dy=0; } else /*if (it[in].sprite==11138)*/ { dx=0; dy=1; } create_ball(0,it[in].x+dx,it[in].y+dy,it[in].x+dx+dx,it[in].y+dy+dy,40); if (drdata[1]==0) { drdata[1]=1; call_item(it[in].driver,in,0,ticker+(((it[in].x+it[in].y)%10)+1)*TICKS); } else if (drdata[2]==4) { call_item(it[in].driver,in,0,ticker+9*TICKS); drdata[2]=0; } else { call_item(it[in].driver,in,0,ticker+7*TICKS/4); drdata[2]++; } } // chestbox if (drdata[0]==3) { if (!drdata[3]) return; drdata[3]=0; it[in].sprite--; set_sector(it[in].x,it[in].y); } // nameplate if (drdata[0]==5) { namecoordx[(int)drdata[1]]=it[in].x; namecoordy[(int)drdata[1]]=it[in].y; } // entrance if (drdata[0]==7) { it[in].sprite=0; set_sector(it[in].x,it[in].y); } // backdoor if (drdata[0]==8) { static int bcnt=0; daemondoorx[bcnt]=it[in].x; daemondoory[bcnt]=it[in].y; bcnt++; } // gun if (drdata[0]==9) { if (!drdata[1]) return; drdata[1]--; it[in].sprite--; set_sector(it[in].x,it[in].y); if (drdata[1]) call_item(it[in].driver,in,0,ticker+GUNRELOAD); } // pike if (drdata[0]==10) { if (!drdata[1]) return; drdata[1]=0; it[in].sprite--; set_sector(it[in].x,it[in].y); } } else { // obelisk if (drdata[0]==1) { ch[cn].hp=ch[cn].value[0][V_HP]*POWERSCALE; ch[cn].mana=ch[cn].value[0][V_MANA]*POWERSCALE; ch[cn].endurance=ch[cn].value[0][V_ENDURANCE]*POWERSCALE; ch[cn].lifeshield=get_lifeshield_max(cn)*POWERSCALE; sound_area(ch[cn].x,ch[cn].y,41); } // chestbox if (drdata[0]==3) { char *str; if (drdata[3]) return; if (ch[cn].citem) return; // check if it was already opened if (check_chestbox(cn,in)) { log_char(cn,LOG_SYSTEM,0,"Thou canst not open the chest again."); return; } // open box (and call close timer) drdata[3]=1; it[in].sprite++; set_sector(it[in].x,it[in].y); call_item(it[in].driver,in,0,ticker+2*TICKS); // which item switch(drdata[1]) { case 1: str="lab5_combopotion"; break; case 2: str="lab5_staff"; break; case 3: str="lab5_dagger"; break; case 4: str="lab5_sword"; break; case 5: str="lab5_twohanded"; break; case 6: str="lab5_manapotion"; break; case 7: str="lab5_manslayer"; break; default: str="oops"; break; } // create and give potion to player in2=create_item(str); log_char(cn,LOG_SYSTEM,0,"You received a %s.",it[in2].name); if (!in2) { xlog("failed to create '%s' item in %s %d",str,__FILE__,__LINE__); return; } ch[cn].citem=in2; ch[cn].flags|=CF_ITEMS; it[in2].carried=cn; } // combopotion if (drdata[0]==4) { ch[cn].hp=ch[cn].value[0][V_HP]*POWERSCALE; ch[cn].mana=ch[cn].value[0][V_MANA]*POWERSCALE; ch[cn].endurance=ch[cn].value[0][V_ENDURANCE]*POWERSCALE; if (ch[cn].value[1][V_MAGICSHIELD]) ch[cn].lifeshield=get_lifeshield_max(cn)*POWERSCALE; log_area(ch[cn].x,ch[cn].y,LOG_INFO,cn,10,"%s drinks a potion.",ch[cn].name); remove_item(in); free_item(in); } // manapotion if (drdata[0]==12) { // ch[cn].hp=ch[cn].value[0][V_HP]*POWERSCALE; ch[cn].mana=ch[cn].value[0][V_MANA]*POWERSCALE; // ch[cn].endurance=ch[cn].value[0][V_ENDURANCE]*POWERSCALE; if (ch[cn].value[1][V_MAGICSHIELD]) ch[cn].lifeshield=get_lifeshield_max(cn)*POWERSCALE; log_area(ch[cn].x,ch[cn].y,LOG_INFO,cn,10,"%s drinks a potion.",ch[cn].name); remove_item(in); free_item(in); } // nameplate if (drdata[0]==5) { // get pd pd=set_data(cn,DRD_LAB5_PLAYER,sizeof(struct lab5_player_data)); if (!pd) return; if (pd->ritualstate==0) { sound_area(ch[cn].x,ch[cn].y,41); pd->ritualdaemon=drdata[1]; pd->ritualstate=1; log_char(cn,LOG_SYSTEM,0,"Thou canst read the symbols now. They form the words:"); log_char(cn,LOG_SYSTEM,0,"°c3The Ritual of %s started.°c0",daemonname[pd->ritualdaemon]); } else ritual_hurt(cn,pd,it[in].x,it[in].y); } // realnameplate if (drdata[0]==6) { // get pd pd=set_data(cn,DRD_LAB5_PLAYER,sizeof(struct lab5_player_data)); if (!pd) return; if (pd->ritualstate==0) { log_char(cn,LOG_SYSTEM,0,"Nothing happens."); return; } if (pd->ritualstate==1 && pd->ritualdaemon==drdata[1]) { sound_area(ch[cn].x,ch[cn].y,41); pd->ritualstate=2; log_char(cn,LOG_SYSTEM,0,"Thou canst read the symbols now. They form the words:"); log_char(cn,LOG_SYSTEM,0,"°c3The ritual of %s is the Ritual of %s.°c0",daemonname[pd->ritualdaemon],daemonreal[pd->ritualdaemon]); } else ritual_hurt(cn,pd,it[in].x,it[in].y); } // entrance if (drdata[0]==7) { static int hurttrans[4]={2,3,0,1}; // get pd pd=set_data(cn,DRD_LAB5_PLAYER,sizeof(struct lab5_player_data)); if (!pd) return; if (pd->ritualstate==0) return; if (pd->ritualstate==2 && pd->ritualdaemon==drdata[1]){ sound_area(ch[cn].x,ch[cn].y,41); pd->ritualdaemon=drdata[1]; pd->ritualstate=3; log_char(cn,LOG_SYSTEM,0,"Mathor tells you: \"The ritual continues. Well done so far, %s.\"",ch[cn].name); // log_char(cn,LOG_SYSTEM,0,"°c3The Ritual of %s continues.°c0",daemonname[pd->ritualdaemon]); } else { if (drdata[1]==2) log_char(cn,LOG_SYSTEM,0,"Mathor tells you: \"Sorry. But a strange power forced me.\""); ritual_hurt(cn,pd,namecoordx[hurttrans[(int)drdata[1]]],namecoordy[hurttrans[(int)drdata[1]]]); } } // backdoor if (drdata[0]==8) { // watch the syntax! if (!teleport_char_driver(cn,namecoordx[2],namecoordy[1])) if (!teleport_char_driver(cn,namecoordx[0],namecoordy[0])) if (!teleport_char_driver(cn,namecoordx[1],namecoordy[1])) if (!teleport_char_driver(cn,namecoordx[2],namecoordy[2])) teleport_char_driver(cn,namecoordx[3],namecoordy[3]); } // gun if (drdata[0]==9) { if (drdata[1]) { log_char(cn,LOG_SYSTEM,0,"Thou canst not push the lever."); return; } drdata[1]=7; it[in].sprite+=7; set_sector(it[in].x,it[in].y); call_item(it[in].driver,in,0,ticker+GUNRELOAD); create_fireball(cn,it[in].x+2,it[in].y,it[in].x+60,it[in].y,100); } // pike if (drdata[0]==10) { hurt(cn,5*POWERSCALE,0,1,0,0); if (drdata[1]) return; drdata[1]++; it[in].sprite++; set_sector(it[in].x,it[in].y); call_item(it[in].driver,in,0,ticker+5*TICKS); } // no potion door if (drdata[0]==11) { if (ch[cn].x<it[in].x && has_potion(cn) ) { log_char(cn,LOG_SYSTEM,0,"°c3Thou canst not enter carrying a mana, healing or combo potion!°c0"); return; } if (ch[cn].x<it[in].x) teleport_char_driver(cn,it[in].x-9,it[in].y-7); else teleport_char_driver(cn,it[in].x+9,it[in].y+7); } } }
void metaballs(enum action action, caca_canvas_t *cv) { static caca_dither_t *caca_dither; static uint8_t *screen; static uint32_t r[256], g[256], b[256], a[256]; static float dd[METABALLS], di[METABALLS], dj[METABALLS], dk[METABALLS]; static unsigned int x[METABALLS], y[METABALLS]; static float i = 10.0, j = 17.0, k = 11.0; static double offset[360 + 80]; static unsigned int angleoff; int n, angle; switch(action) { case PREPARE: /* Make the palette eatable by libcaca */ for(n = 0; n < 256; n++) r[n] = g[n] = b[n] = a[n] = 0x0; r[255] = g[255] = b[255] = 0xfff; /* Generate ball sprite */ create_ball(); for(n = 0; n < METABALLS; n++) { dd[n] = caca_rand(0, 100); di[n] = (float)caca_rand(500, 4000) / 6000.0; dj[n] = (float)caca_rand(500, 4000) / 6000.0; dk[n] = (float)caca_rand(500, 4000) / 6000.0; } angleoff = caca_rand(0, 360); for(n = 0; n < 360 + 80; n++) offset[n] = 1.0 + sin((double)(n * M_PI / 60)); break; case INIT: screen = malloc(XSIZ * YSIZ * sizeof(uint8_t)); /* Create a libcaca dither smaller than our pixel buffer, so that we * display only the interesting part of it */ caca_dither = caca_create_dither(8, XSIZ - METASIZE, YSIZ - METASIZE, XSIZ, 0, 0, 0, 0); break; case UPDATE: angle = (frame + angleoff) % 360; /* Crop the palette */ for(n = CROPBALL; n < 255; n++) { int t1, t2, t3; double c1 = offset[angle]; double c2 = offset[angle + 40]; double c3 = offset[angle + 80]; t1 = n < 0x40 ? 0 : n < 0xc0 ? (n - 0x40) * 0x20 : 0xfff; t2 = n < 0xe0 ? 0 : (n - 0xe0) * 0x80; t3 = n < 0x40 ? n * 0x40 : 0xfff; r[n] = (c1 * t1 + c2 * t2 + c3 * t3) / 4; g[n] = (c1 * t2 + c2 * t3 + c3 * t1) / 4; b[n] = (c1 * t3 + c2 * t1 + c3 * t2) / 4; } /* Set the palette */ caca_set_dither_palette(caca_dither, r, g, b, a); /* Silly paths for our balls */ for(n = 0; n < METABALLS; n++) { float u = di[n] * i + dj[n] * j + dk[n] * sin(di[n] * k); float v = dd[n] + di[n] * j + dj[n] * k + dk[n] * sin(dk[n] * i); u = sin(i + u * 2.1) * (1.0 + sin(u)); v = sin(j + v * 1.9) * (1.0 + sin(v)); x[n] = (XSIZ - METASIZE) / 2 + u * (XSIZ - METASIZE) / 4; y[n] = (YSIZ - METASIZE) / 2 + v * (YSIZ - METASIZE) / 4; } i += 0.011; j += 0.017; k += 0.019; memset(screen, 0, XSIZ * YSIZ); for(n = 0; n < METABALLS; n++) draw_ball(screen, x[n], y[n]); break; case RENDER: caca_dither_bitmap(cv, 0, 0, caca_get_canvas_width(cv), caca_get_canvas_height(cv), caca_dither, screen + (METASIZE / 2) * (1 + XSIZ)); break; case FREE: free(screen); caca_free_dither(caca_dither); break; } }
Eina_Bool animator_spawns_balls(animator_callback_gui_shared_info_s *common_data){ create_ball(common_data); ecore_animator_freeze(common_data->balls_animator); //spawn single ball and stop return ECORE_CALLBACK_RENEW; }