Exemplo n.º 1
0
sbool ai_npc_move(uint32 mapnum, uint8 mapnpcnum, uint16 target)
{
	switch(rand() % 4){
	case 0:
		if(map(mapnum)->npc[mapnpcnum].y > player(target)->y && !ai_npc_move(mapnum,mapnpcnum,target)){
			if(can_npc_move(mapnum, mapnpcnum,DIR_UP)){
				npc_move(mapnum, mapnpcnum, DIR_UP); return TRUE;
			}
			break;
		}
	case 1:
		if(map(mapnum)->npc[mapnpcnum].y < player(target)->y && !ai_npc_move(mapnum,mapnpcnum,target)){
			if(can_npc_move(mapnum, mapnpcnum,DIR_DOWN)){
				npc_move(mapnum, mapnpcnum, DIR_DOWN); return TRUE;
			}
		}
		break;
	case 2:
		if(map(mapnum)->npc[mapnpcnum].x > player(target)->x && !ai_npc_move(mapnum,mapnpcnum,target)){
			if(can_npc_move(mapnum, mapnpcnum,DIR_LEFT)){
				npc_move(mapnum, mapnpcnum, DIR_LEFT); return TRUE;
			}
		}
		break;
	case 3:
		if(map(mapnum)->npc[mapnpcnum].x < player(target)->x && !ai_npc_move(mapnum,mapnpcnum,target)){
			if(can_npc_move(mapnum, mapnpcnum,DIR_RIGHT)){
				npc_move(mapnum, mapnpcnum, DIR_RIGHT); return TRUE;
			}
		}
		break;
	}
	return FALSE;
}
Exemplo n.º 2
0
void ai_npc_collision(sbool didwalk, uint32 mapnum , uint8 mapnpcnum, uint16 target)
{
	uint8 i;

	if(didwalk)
		return;

	if(!didwalk){
		if(map(mapnum)->npc[mapnpcnum].x - 1 == player(target)->x && map(mapnum)->npc[mapnpcnum].y == player(target)->y)
			if(map(mapnum)->npc[mapnpcnum].dir != DIR_LEFT) npc_dir(mapnum, mapnpcnum, DIR_LEFT); didwalk = TRUE;
	}

	if(!didwalk){
		if(map(mapnum)->npc[mapnpcnum].x + 1 == player(target)->x && map(mapnum)->npc[mapnpcnum].y == player(target)->y)
			if(map(mapnum)->npc[mapnpcnum].dir != DIR_RIGHT) npc_dir(mapnum, mapnpcnum, DIR_RIGHT); didwalk = TRUE;
	}

	if(!didwalk){
		if(map(mapnum)->npc[mapnpcnum].x == player(target)->x && map(mapnum)->npc[mapnpcnum].y - 1 == player(target)->y)
			if(map(mapnum)->npc[mapnpcnum].dir != DIR_UP) npc_dir(mapnum, mapnpcnum, DIR_UP); didwalk = TRUE;
	}

	if(!didwalk){
		if(map(mapnum)->npc[mapnpcnum].x == player(target)->x && map(mapnum)->npc[mapnpcnum].y + 1 == player(target)->y)
			if(map(mapnum)->npc[mapnpcnum].dir != DIR_DOWN) npc_dir(mapnum, mapnpcnum, DIR_DOWN); didwalk = TRUE;
	}

	if(!didwalk){
		if((rand() % 2) == 1){
			i = rand() % 4;
			if(can_npc_move(mapnum, mapnpcnum, i))
				npc_move(mapnum, mapnpcnum, i);
		}
	}
}
Exemplo n.º 3
0
Arquivo: world.c Projeto: jcnix/JBlux
void move_enemies()
{
    struct map_list *curr = maps;
    while(curr)
    {
        struct map_t *map = curr->map;
        struct npc_list *npcs = map->enemies;
        while(npcs)
        {
            struct npc_data *npc = npcs->npc;
            npc_move(npc);
            npcs = npcs->next;
        }
        curr = curr->next;
    }
}
Exemplo n.º 4
0
void update_npc_ai(void)
{
	uint8 i = 0;
	uint32 mapnum = 1;
	uint8 mapnpcnum = 0;
	uint16 npcnum, target;
	double  tickcount;
	uint32 damage;
	char *string = NULL;

	for(mapnum = 1; mapnum < MAX_MAPS; mapnum++){
		if(players_on_map(mapnum)){
			tickcount = gettickcount();

			for(mapnpcnum = 0; mapnpcnum < MAX_MAP_NPCS; mapnpcnum++){
				npcnum = map(mapnum)->npc[mapnpcnum].num;

				if(npcnum > 0){
					target = map(mapnum)->npc[mapnpcnum].target;

					ai_attack_on_sight(mapnpcnum, target, mapnum);

					if(npc(npcnum)->behavior != BEHAVIOR_SHOPKEEPER){
						if(target > 0){
							if(temp_player(target)->loggedin && player(target)->map == mapnum){
								ai_npc_collision(ai_npc_move(mapnum, mapnpcnum, target), mapnum, mapnpcnum, target);

								if(can_npc_attack_player(mapnpcnum,target)){
									if(!can_player_block_hit(target)){
										damage = npc(npcnum)->stat[STAT_STRENGTH] - get_player_protection(target);
										npc_attack_player(mapnpcnum, target, damage);
									}
									else{
										string = comb_4str(item(player(target)->inv[player(target)->equipment[EQUIPMENT_SHIELD]].id)->name, " blocks the ", npc(npcnum)->name,"'s hit!");
										player_msg(target, string, 1); //bright cyan
									}
								}
								else
									map(mapnum)->npc[mapnpcnum].target = 0;
							}
							else
								map(mapnum)->npc[mapnpcnum].target = 0;
						}
					}
					else{
						if((rand() % 4) == 1){
							i = rand() % 4;

							if(can_npc_move(mapnum,mapnpcnum, i))
								npc_move(mapnum,mapnpcnum,i);
						}
					}

					ai_hp_regen(tickcount, mapnum, mapnpcnum);

					if(tickcount > map(mapnum)->npc[mapnpcnum].spawnwait + npc(map(mapnum)->npc[mapnpcnum].num)->spawnsecs * 1000)
						spawn_npc(mapnpcnum, mapnum);
				}
			}
		}
	}
}
Exemplo n.º 5
0
int main()
{
	window_setup();
	data_setup();
	SDL_Event event;	
	while(1)
	{
	start_time = SDL_GetTicks();

	if (SDL_PollEvent(&event))
	{
		handle_event(&event);
	}
/*	
	//Set up screen and background display
	for (int x = 0; x < SCREEN_WIDTH / SPRITE_SIZE; x++) 
	{
		for (int y = 0; y < SCREEN_HEIGHT / SPRITE_SIZE; y++)
		{
			rcGrass.x = x * SPRITE_SIZE;
			rcGrass.y = y * SPRITE_SIZE;
			SDL_BlitSurface(grass, &rcSrc_Grass, screen, &rcGrass);
		}
	}
*/
SDL_BlitSurface(grass, &rcSrc_Grass, screen, &rcGrass);	
	//Handle character movement
	int i = 0;
	for (i = 0; i<2; i++){
		npc_move(&demo[i]);
		animate(&demo[i]);
		move(&demo[i]);

		rcSprite.x = demo[i].move.position[0];
		rcSprite.y = demo[i].move.position[1];
		switch(demo[i].move.direction)
		{
			case SDLK_UP:
				rcSrc_Sprite.y = demo[i].up[demo[i].cur_frame];
			break;
			case SDLK_DOWN:
				rcSrc_Sprite.y = demo[i].down[demo[i].cur_frame];
			break;
			case SDLK_LEFT:
				rcSrc_Sprite.y = demo[i].left[demo[i].cur_frame];
			break;
			case SDLK_RIGHT:
				rcSrc_Sprite.y = demo[i].right[demo[i].cur_frame];
			break;
		}
		SDL_BlitSurface(sprite, &rcSrc_Sprite, screen, &rcSprite);
	}/*
	animate(&demo1);
	animate(&demo2);
	
	move(&demo1);
	move(&demo2);

	rcSprite.x = demo1.move.position[0];
	rcSprite.y = demo1.move.position[1];
		switch(demo1.move.direction)
		{
			case SDLK_UP:
				rcSrc_Sprite.y = demo1.up[demo1.cur_frame];
			break;
			case SDLK_DOWN:
				rcSrc_Sprite.y = demo1.down[demo1.cur_frame];
			break;
			case SDLK_LEFT:
				rcSrc_Sprite.y = demo1.left[demo1.cur_frame];
			break;
			case SDLK_RIGHT:
				rcSrc_Sprite.y = demo1.right[demo1.cur_frame];
			break;
		}
*/
	SDL_UpdateRect(screen, 0, 0, 0, 0);
	endtime = SDL_GetTicks()-start_time;
	if (1000/FPS > endtime) SDL_Delay((1000/FPS)-endtime);
	}
}