示例#1
0
ssize_t read(int fd,void * buffer,size_t n){
	if(fd==frameBuf_FD){
		memcpy(buffer,LCDstatefd,n);
		LCDstatefd+=n;
		return n;
	}else if(fd==urandom_FD){
		size_t c=n;
		unsigned int * d=(unsigned int *)buffer;
		while (c>=4){
			*d++=sys_rand();
			c-=4;
		}
		unsigned char * r=(unsigned char *)d;//remaindor
		while(c--){
			*r++=sys_rand();
		}
		return n;
	}else if(fd==0){
		//printf("Read %d bytes from stdin\n",n);
		inputStrTiny(buffer,n,1);
	}else if(fd>5)
		return Bfile_ReadFile_OS(toNativeFD(fd),buffer, n,-1);
	else
		return -1;
}
示例#2
0
文件: main.c 项目: dorkster/espada
void game_enemyspawn()
{
    int i;
    char wavemsg[64];
    
    if(gamestate_init == true)
    {
        game_enemytotal = 0;
        game_enemywaves = 0;
        for(i=0;i<MAXENEMIES;i++)
        {
            obj_enemy[i].alive = false;
        }
    }
    if(game_enemytotal == 0)
    {
        if(enemyspawnTimer == 0)
        {
            for(i=0;i<MAXENEMIES;i++)
            {                
                if(obj_enemy[i].alive != true)
                {
                    if(game_enemywaves < 5)
                    {
                        obj_enemy[i].dim.w = 64;
                        obj_enemy[i].dim.h = 32;
                        obj_enemy[i].type = 0;
                    }
                    else
                    {
                        obj_enemy[i].dim.w = 64;
                        obj_enemy[i].dim.h = 64;
                        obj_enemy[i].type = 1;
                    }
                    obj_enemy[i].alive = true;
                    game_enemytotal += 1;
                    obj_enemy[i].frame = 0;
                    obj_enemy[i].pathlength = 0;
                    obj_enemy[i].laserTimer = 0;
                    obj_enemy[i].dir = sys_rand(0,1);
                    obj_enemy[i].dim.x = sys_rand(0,SCREEN_WIDTH - obj_enemy[i].dim.w);
                    obj_enemy[i].dim.y = sys_rand(-192,-64);
                }
            }
        }
        if(enemyspawnTimer > 0 )
            enemyspawnTimer -= 1;
    }
    else
    {
        enemyspawnTimer = 180;
    }
    
    if(enemyspawnTimer == 179 && game_enemytotal == 0)
    {
        game_enemywaves += 1;
        sprintf(wavemsg,"Wave: %d",game_enemywaves);
        game_setstatustext(wavemsg,120);
    }
}
示例#3
0
文件: main.c 项目: dorkster/espada
void game_enemyfire()
{
    int i,j;
    
    for(j=0;j<MAXENEMIES;j++)
    {
        if(obj_enemy[j].laserTimer == 0 && obj_enemy[j].alive && (obj_enemy[j].dim.y + obj_enemy[j].dim.h) >= 0)
        {
            for(i=0;i<MAXLASERS;i++)
            {
                obj_enemy[j].laz[i].dim.w = 8;
                obj_enemy[j].laz[i].dim.h = 16;
                
                if(obj_enemy[j].laz[i].alive != true)
                {
                    obj_enemy[j].laz[i].alive = true;
                    obj_enemy[j].laz[i].dim.x = obj_enemy[j].dim.x + (obj_enemy[j].dim.w/2);
                    obj_enemy[j].laz[i].dim.y = obj_enemy[j].dim.y + obj_enemy[j].laz[i].dim.h;
                    if(obj_enemy[j].type == 0)
                        obj_enemy[j].laserTimer = sys_rand(100,250);
                    else if (obj_enemy[j].type == 1)
                        obj_enemy[j].laserTimer = sys_rand(50,100);
                    sound_playfx(snd_enemy_fire);
                    break;
                }
            }
        }
        
        if(obj_enemy[j].laserTimer > 0)
            obj_enemy[j].laserTimer--;
    }
}
示例#4
0
文件: neighbor.c 项目: nesl/sos-2x
static int8_t nbr_msg_handler(void *state, Message *msg)
{
	nbr_state_t *s = (nbr_state_t*)state;
	
	/**
	* Switch to the correct message handler
	 */
	switch (msg->type){
		case MSG_INIT:
		{
		
			s->nb_list = NULL;
			s->nb_cnt = 0;
			s->est_ticks = 0;
			s->gCurrentSeqNo = 0;
			
			sys_shm_open( sys_shm_name(NBHOOD_PID, SHM_NBR_LIST), s->nb_list );
			
			sys_timer_start(BACKOFF_TIMER, sys_rand() % 1024L, TIMER_ONE_SHOT);
			break;
		}
			
		case MSG_FINAL:
		{
			break;
		}
			
		case MSG_TIMER_TIMEOUT:
		{
			if( timer_get_tid( msg ) == BACKOFF_TIMER ) {
				sys_timer_start(NEIGHBOR_DISCOVERY_TIMER, NEIGHBOR_TIMER_INTERVAL, TIMER_REPEAT);
			} else {
				//
				// Send beacon packets
				//
				update_table( s );
				sys_shm_update( sys_shm_name(NBHOOD_PID, SHM_NBR_LIST), s->nb_list );
				send_beacon( s );
				nb_debug(s);
			}
			break;
		}
		case MSG_BEACON_PKT:
		{
			//
			// Process beacon packets
			//
			recv_beacon( s, msg );
			break;
		}
			
		default:
			return -EINVAL;
	}
	
	/**
		* Return SOS_OK for those handlers that have successfully been handled.
	 */
	return SOS_OK;
}
示例#5
0
//--------------------------------------------------------------------
// EXTERNAL FUNCTIONS
//--------------------------------------------------------------------
int8_t execute(dvm_state_t* dvm_st, DvmState *eventState)
{
    DVMBasiclib_state_t *s = (&dvm_st->basiclib_st);
    DvmContext *context = &(eventState->context);

    while ((context->state == DVM_STATE_RUN) && (context->num_executed < DVM_CPU_SLICE)) {
        DvmOpcode instr = getOpcode(dvm_st, context->which, context->pc);
        DEBUG("-----------------------------------------------\n");
        DEBUG("[BASIC_LIB] execute: (%d) PC: %d. INSTR: %d\n",context->which, context->pc, instr);
        if(instr & LIB_ID_BIT)
        {   //Extension Library opcode encountered
            return SOS_OK;
        }
        context->num_executed++;
        switch(instr)
        {
        case OP_START:
        {
            __asm __volatile("__sleep_measure_start:");
            context->pc += 1;
            break;
        }
        case OP_STOP:
        {
            context->pc += 1;
            break;
        }
        case OP_HALT:
        {
            DEBUG("<<<<<<<<<<<=====================>>>>>>>>>>>\n");
            DEBUG("[BASIC_LIB] execute: (%d): HALT executed.\n", (int)context->which);
            haltContext(dvm_st, context);
            context->state = DVM_STATE_HALT;
            context->pc = 0;
            break;
        }
        case OP_LED:
        {
            DvmStackVariable* arg = popOperand( eventState);
            led_op(arg->value.var);
            context->pc += 1;
            break;
        }

        case OP_GETVAR + 0:
        case OP_GETVAR + 1:
        case OP_GETVAR + 2:
        case OP_GETVAR + 3:
        case OP_GETVAR + 4:
        case OP_GETVAR + 5:
        case OP_GETVAR + 6:
        case OP_GETVAR + 7:
        {
            uint8_t arg = instr - OP_GETVAR;
            DEBUG("[BASIC_LIB] execute: OPGETVAR (%d):: Pushing value %d.\n", (int)arg,(int)s->shared_vars[arg].value.var);
            pushOperand( eventState, &s->shared_vars[arg]);
            context->pc += 1;
            break;
        }
        case OP_SETVAR + 0:
        case OP_SETVAR + 1:
        case OP_SETVAR + 2:
        case OP_SETVAR + 3:
        case OP_SETVAR + 4:
        case OP_SETVAR + 5:
        case OP_SETVAR + 6:
        case OP_SETVAR + 7:
        {
            uint8_t arg = instr - OP_SETVAR;
            DvmStackVariable* var = popOperand( eventState);
            DEBUG("[BASIC_LIB] execute: OPSETVAR (%d):: Setting value to %d.\n",(int)arg,(int)var->value.var);
            s->shared_vars[arg] = *var;
            context->pc += 1;
            break;
        }
        case OP_GETVARF + 0:
        case OP_GETVARF + 1:
        case OP_GETVARF + 2:
        case OP_GETVARF + 3:
        case OP_GETVARF + 4:
        case OP_GETVARF + 5:
        case OP_GETVARF + 6:
        case OP_GETVARF + 7:
        {   // Use for type casting an integer shared var to float
            uint8_t arg = instr - OP_GETVARF;
            int32_t res = 0;
            uint16_t res_part = 0;
            DEBUG("[BASIC_LIB] execute: OPGETVARF (%d):: Pushing value %d.\n", (int)arg,(int)s->shared_vars[arg].value.var);
            res = (int32_t)(s->shared_vars[arg].value.var * FLOAT_PRECISION);
            res_part = res & 0xFFFF;
            pushValue( eventState, res_part, DVM_TYPE_FLOAT_DEC);
            res_part = res >> 16;
            pushValue( eventState, res_part, DVM_TYPE_FLOAT);
            context->pc += 1;
            break;
        }
        case OP_SETVARF + 0:
        case OP_SETVARF + 1:
        case OP_SETVARF + 2:
        case OP_SETVARF + 3:
        case OP_SETVARF + 4:
        case OP_SETVARF + 5:
        case OP_SETVARF + 6:
        {   // Type-casting an integer to float and saving it in shared var
            uint8_t arg = instr - OP_SETVARF;
            DvmStackVariable* var = popOperand( eventState);
            int32_t res = 0;
            uint16_t res_part;
            DEBUG("[BASIC_LIB] execute: OPSETVARF (%d):: Setting value to %d.\n",(int)arg,(int)var->value.var);
            res = (int32_t)(var->value.var * FLOAT_PRECISION);
            res_part = res & 0xFFFF;
            s->shared_vars[arg+1].type = DVM_TYPE_FLOAT_DEC;
            s->shared_vars[arg+1].value.var = res_part;
            res_part = res >> 16;
            s->shared_vars[arg].type = DVM_TYPE_FLOAT;
            s->shared_vars[arg].value.var = res_part;
            context->pc += 1;
            break;
        }
        case OP_SETTIMER + 0:
        case OP_SETTIMER + 1:
        case OP_SETTIMER + 2:
        case OP_SETTIMER + 3:
        case OP_SETTIMER + 4:
        case OP_SETTIMER + 5:
        case OP_SETTIMER + 6:
        case OP_SETTIMER + 7:
        {
            uint32_t msec;
            uint8_t timerID = instr - OP_SETTIMER;
            DvmStackVariable* arg = popOperand( eventState);
            DEBUG("[BASIC_LIB] execute: Setting Timer %d period to %d.\n", timerID, arg->value.var);
            //msec = 102 * arg->value.var + (4 * arg->value.var) / 10;
            // Set the timer timeout argument in seconds
            msec = arg->value.var * 4;// * 1000;
            DEBUG("[BASIC_LIB] execute: <<<<< WARNING - Timer %d not being stopped >>>>\n", timerID);
            //	  sys_timer_stop(timerID);
            if (msec > 0) {
                // Ram - Where is the init ??
                sys_timer_start(timerID, msec, TIMER_REPEAT);
                DEBUG("[BASIC_LIB] execute: Timer ID: %d started. Period: %d msec.\n", timerID, msec);
            }
            context->pc += 1;
            break;
        }
        case OP_RAND:
        {
            DvmStackVariable* arg = popOperand( eventState);
            uint16_t rnd;
            rnd = sys_rand() % arg->value.var;
            pushValue( eventState, rnd, DVM_TYPE_INTEGER);
            context->pc += 1;
            break;
        }
        /*
          case OP_JMP: case OP_JNZ: case OP_JZ: case OP_JG:
          case OP_JGE: case OP_JL: case OP_JLE: case OP_JE:
          case OP_JNE:
          case OP_ADD: case OP_SUB: case OP_DIV: case OP_MUL:
          case OP_ABS: case OP_MOD: case OP_INCR: case OP_DECR:
          {
          mathlib_executeDL(s->mathlib_execute, eventState, instr);
          break;
          }
        */
        // Math Lib
        case OP_ADD:
        case OP_SUB:
        case OP_DIV:
        case OP_MUL:
        {
            DvmStackVariable* arg1 = popOperand( eventState);
            DvmStackVariable* arg2 = popOperand( eventState);
            DvmStackVariable* arg3 = NULL, *arg4 = NULL;
            int32_t fl_arg1, fl_arg2;
            int32_t res = 0;
            uint16_t res_part;
            int16_t int_res = 0;

            if (arg1->type == DVM_TYPE_FLOAT) {
                fl_arg1 = convert_to_float(arg1, arg2);
                arg3 = popOperand( eventState);
                if (arg3->type == DVM_TYPE_FLOAT) {
                    // FLOAT <op> FLOAT
                    arg4 = popOperand( eventState);
                    fl_arg2 = convert_to_float(arg3, arg4);
                    if(instr == OP_ADD) {
                        res = (int32_t)(fl_arg1 + fl_arg2);
                        DEBUG("[BASIC_LIB] execute: FLOAT ADD FLOAT %d\n", res);
                    } else if(instr == OP_SUB) {
                        res = (int32_t)(fl_arg1 - fl_arg2);
                        DEBUG("[BASIC_LIB] execute: FLOAT SUB FLOAT %d\n", res);
                    } else if(instr == OP_DIV) {
                        res = (int32_t)((fl_arg1 * FLOAT_PRECISION) / fl_arg2);
                        DEBUG("[BASIC_LIB] execute: FLOAT DIV FLOAT: %d\n", res);
                    } else if(instr == OP_MUL) {
                        res = (int32_t)((fl_arg1 * fl_arg2) / FLOAT_PRECISION);
                        DEBUG("[BASIC_LIB] execute: FLOAT MULT FLOAT %d\n", res);
                    }
                } else {
                    // FLOAT <OP> INTEGER
                    if(instr == OP_ADD) {
                        res = (int32_t)(fl_arg1 + (arg3->value.var * FLOAT_PRECISION));
                        DEBUG("[BASIC_LIB] execute: FLOAT ADD INT: %d\n", res);
                    } else if(instr == OP_SUB) {
                        res = (int32_t)(fl_arg1 - (arg3->value.var * FLOAT_PRECISION));
                        DEBUG("[BASIC_LIB] execute: FLOAT SUB INT: %d\n", res);
                    } else if(instr == OP_DIV) {
                        res = (int32_t)(fl_arg1 / arg3->value.var);
                        DEBUG("[BASIC_LIB] execute: FLOAT DIV INT: %d\n", res);
                        sys_led(LED_RED_TOGGLE);
#ifdef OUTLIER_SCRIPT_DBG
                        int32_t* post_avg;
                        post_avg = (int32_t*)sys_malloc(sizeof(int32_t));
                        *post_avg = res;
                        sys_post_uart(OUTLIER_DETECTION_PID, MSG_AVERAGE, sizeof(int32_t),
                                      post_avg, SOS_MSG_RELEASE, UART_ADDRESS);
#endif
                    } else if(instr == OP_MUL) {
                        res = (int32_t)(fl_arg1 * arg3->value.var);
                        DEBUG("[BASIC_LIB] execute: FLOAT MULT INT %d\n", res);
                    }
                }
                res_part = res & 0xFFFF;
                pushValue( eventState, res_part, DVM_TYPE_FLOAT_DEC);
                res_part = res >> 16;
                pushValue( eventState, res_part, DVM_TYPE_FLOAT);
                context->pc += 1;
                break;
            } else if (arg2->type == DVM_TYPE_FLOAT) {
                arg3 = popOperand( eventState);
                fl_arg2 = convert_to_float(arg2, arg3);
                if(instr == OP_ADD) {
                    res = (int32_t)((arg1->value.var * FLOAT_PRECISION) + fl_arg2) ;
                    DEBUG("[BASIC_LIB] execute: INT ADD FLOAT: %d\n", res);
                } else if(instr == OP_SUB) {
                    res = (int32_t)((arg1->value.var * FLOAT_PRECISION) - fl_arg2);
                    DEBUG("[BASIC_LIB] execute: INT SUB FLOAT: %d\n", res);
                } else if(instr == OP_DIV) {
                    res = (int32_t)((arg1->value.var * FLOAT_PRECISION) / fl_arg2);
                    DEBUG("[BASIC_LIB] execute: INT DIV FLOAT: %d\n", res);
                } else if(instr == OP_MUL) {
                    res = (int32_t)((arg1->value.var * FLOAT_PRECISION) * fl_arg2);
                    DEBUG("[BASIC_LIB] execute: INT MULT FLOAT: %d\n", res);
                }
                res_part = res & 0xFFFF;
                pushValue( eventState, res_part, DVM_TYPE_FLOAT_DEC);
                res_part = res >> 16;
                pushValue( eventState, res_part, DVM_TYPE_FLOAT);
                context->pc += 1;
                break;
            }
            if(instr == OP_ADD) {
                int_res = arg1->value.var + arg2->value.var;
                DEBUG("[BASIC_LIB] execute: INT ADD INT: %d\n", int_res);
            } else if(instr == OP_SUB) {
                int_res = arg1->value.var - arg2->value.var;
                DEBUG("[BASIC_LIB] execute: INT SUB INT: %d\n", int_res);
            } else if(instr == OP_DIV) {
                int_res = (int16_t)(arg1->value.var / arg2->value.var);
                DEBUG("[BASIC_LIB] execute: INT DIV INT: %d\n", int_res);
            } else if(instr == OP_MUL) {
                int_res = (int16_t)(arg1->value.var * arg2->value.var);
                DEBUG("[BASIC_LIB] execute: INT MULT INT: %d\n", int_res);
            }
            pushValue( eventState, int_res, DVM_TYPE_INTEGER);
            context->pc += 1;
            break;
        }
示例#6
0
文件: rand_test.c 项目: nesl/sos-2x
static int8_t generic_test_msg_handler(void *state, Message *msg)
{
	app_state_t *s = (app_state_t *) state;

	switch ( msg->type ) {

		/* do any initialization steps here, 
		 * in general it is good to set all the leds to off so that you can analyze what happens later more accurately
		 * also be sure to start and enable any timers which your driver might need 
		 */
		case MSG_INIT:
			sys_led(LED_GREEN_OFF);
			sys_led(LED_YELLOW_OFF);
			sys_led(LED_RED_OFF);

			s->state = TEST_APP_INIT;
			s->count = 0;
			s->pid = msg->did;

			sys_timer_start(TEST_APP_TID, TEST_APP_INTERVAL, SLOW_TIMER_REPEAT);
      send_new_data(START_DATA, 0);
			break;

		case MSG_ERROR:
			s->state = TEST_APP_INIT;
			s->count = 0;
			s->pid = msg->did;

			sys_timer_start(TEST_APP_TID, TEST_APP_INTERVAL, SLOW_TIMER_REPEAT);
			send_new_data(START_DATA, 0);
			break;

		case MSG_FINAL:
			sys_timer_stop(TEST_APP_TID);
			s->state = TEST_APP_FINAL;
			send_new_data(FINAL_DATA, 1);
			break;

	  /* here we handle messages of type MSG_TEST_DATA
		 * in most cases, only the base station node should be doing this since it is the only one connected to the uart
		 * if your test does not use multiple nodes, or your messages are sent via another module, this is not needed
		 */
		case MSG_TEST_DATA:
			{
				uint8_t *payload;
				uint8_t msg_len;

				msg_len = msg->len;
				payload = sys_msg_take_data(msg);

				sys_post_uart(
						s->pid, 
						MSG_TEST_DATA,
						msg_len,
						payload,
						SOS_MSG_RELEASE,
						BCAST_ADDRESS);
    	}
			break;

		case MSG_TIMER_TIMEOUT:
			{
				switch(s->state){
				  case TEST_APP_INIT:
					  {
							send_new_data(1, sys_rand());
							s->count++;
						}
						break;

					default:
						return -EINVAL;
						break;
				}
			} 
			break;

		default:
			return -EINVAL;
			break;
	}
	return SOS_OK;
}
示例#7
0
static int8_t test_tpsn_net_module_handler(void *state, Message *msg)
{
	app_state_t *s = (app_state_t *) state;
	MsgParam *p = (MsgParam*)(msg->data);
	
	switch (msg->type)
	{
		case MSG_INIT:
		{
		  s->pid = msg->did;
		  sys_register_isr(0, USERINT_FID);		  
		  s->state = 0;

		  // If master node, start the transmit_timer
		  if(sys_id() == 0) sys_timer_start(TRANSMIT_TIMER, TRANSMIT_INTERVAL, TIMER_REPEAT);
		  
		  sys_led(LED_RED_OFF);
		  sys_led(LED_GREEN_OFF);
		  sys_led(LED_YELLOW_OFF);
		  break;
		}
    	case MSG_GLOBAL_TIME_REPLY:
		{
            msg_global_time_t* msg_global_time = (msg_global_time_t*)msg->data;

            s->time = msg_global_time->time;
            s->refreshed = msg_global_time->refreshed;

            sys_timer_start(DELAY_TIMER, sys_rand()%256, TIMER_ONE_SHOT);

           break;
		}

        case MSG_GLOBAL_TIME_SEND:
        {
            msg_global_time_send_t* datamsg = (msg_global_time_send_t*) sys_msg_take_data(msg);
            //sys_led(LED_YELLOW_TOGGLE);
            sys_post_uart(s->pid, MSG_GLOBAL_TIME_SEND, sizeof(msg_global_time_send_t), datamsg, SOS_MSG_RELEASE, BCAST_ADDRESS);
            break;
        }
        case MSG_TIMER_TIMEOUT:
        {
            switch(p->byte)
            {
                case TRANSMIT_TIMER:
                    {
                        if (s->state){
                            sys_led(LED_GREEN_OFF);
                            SETBITLOW(P2OUT, 3);
                            s->state = 0;
                        } else {
                            uint32_t timestamp;
                            msg_global_time_send_t* msg_global_time_send;

                            sys_led(LED_GREEN_ON);
                            SETBITHIGH(P2OUT, 3);
                            timestamp = sys_time32();

							// Construct the packet and send it over uart
							msg_global_time_send = (msg_global_time_send_t*)sys_malloc(sizeof(msg_global_time_send_t));
                            msg_global_time_send->addr = sys_id();
                            msg_global_time_send->time = timestamp;
                            msg_global_time_send->refreshed = 0;
                            sys_post_uart(s->pid, MSG_GLOBAL_TIME_SEND, sizeof(msg_global_time_send_t), msg_global_time_send, SOS_MSG_RELEASE, BCAST_ADDRESS);

                            s->state = 1;
                        }
                        break;
                    }
                case DELAY_TIMER:
                    {
                        msg_global_time_send_t* msg_global_time_send = (msg_global_time_send_t*)sys_malloc(sizeof(msg_global_time_send_t));
                        sys_led(LED_GREEN_TOGGLE);
                        msg_global_time_send->addr = sys_id();
                        msg_global_time_send->time = s->time;
                        msg_global_time_send->refreshed = s->refreshed;
                        sys_post_net(s->pid, MSG_GLOBAL_TIME_SEND, sizeof(msg_global_time_send_t), msg_global_time_send, SOS_MSG_RELEASE, 0);
             
                        break;
                    }
                }

                break;
            }

		default:
			return -EINVAL;
	}

	/**
	 * Return SOS_OK for those handlers that have successfully been handled.
	 */
	return SOS_OK;
}
示例#8
0
文件: main.c 项目: dorkster/espada
void game_enemymove()
{
    int movespeed;
    
    int i;

    for(i=0;i<MAXENEMIES;i++)
    {
        if(obj_enemy[i].alive == true)
        {
            if(obj_enemy[i].type == 0)
                movespeed = 2;
            else if(obj_enemy[i].type == 1)
                movespeed = 3;
            
            if(obj_enemy[i].pathlength == 0)
            {
                obj_enemy[i].pathlength = sys_rand(10,SCREEN_WIDTH/2);
            }
            if(obj_enemy[i].pathlength != 0)
            {
                if(obj_enemy[i].dir == 0)
                {
                    if(obj_enemy[i].dim.x + obj_enemy[i].dim.w < SCREEN_WIDTH)
                    {
                        obj_enemy[i].dim.x += movespeed;
                        obj_enemy[i].pathlength--;
                    }
                    if(obj_enemy[i].dim.x + obj_enemy[i].dim.w >= SCREEN_WIDTH || obj_enemy[i].pathlength == 0)
                    {
                        obj_enemy[i].dir = 1;
                        obj_enemy[i].pathlength = 0;
                    }
                }
                else if(obj_enemy[i].dir == 1)
                {
                    if(obj_enemy[i].dim.x > 0)
                    {
                        obj_enemy[i].dim.x -= movespeed;
                        obj_enemy[i].pathlength--;
                    }
                    if(obj_enemy[i].dim.x <= 0 || obj_enemy[i].pathlength == 0)
                    {
                        obj_enemy[i].dir = 0;
                        obj_enemy[i].pathlength = 0;
                    }
                }
            }
            
            obj_enemy[i].dim.y += 1;
        }
        
        if(obj_enemy[i].dim.y > SCREEN_BOTTOM+obj_enemy[i].dim.h)
        {
            obj_enemy[i].alive = false;
            game_enemytotal -= 1;
            obj_enemy[i].dim.x = 0;
            obj_enemy[i].dim.y = 0;
            if(gamestate_over == false)
            {
                if(obj_enemy[i].type == 0)
                    obj_player.score -= 100;
                else if(obj_enemy[i].type == 1)
                    obj_player.score -= 200;
            }
            if(obj_player.score < 0)
                obj_player.score = 0;
            break;
        }
    }
    if(enemyTimer > 0)
        enemyTimer--;
}