Exemplo n.º 1
0
Arquivo: main.c Projeto: ErikHK/tsbk03
/////////////////////////////////////////
//		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);
}
Exemplo n.º 2
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);
                }
        }

}
Exemplo n.º 3
0
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;
    }
}
Exemplo n.º 4
0
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;
}