X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fminigames%2Fminigame%2Fsnake.qc;h=617ed957ca635f84081282dbeee62f664fb67ea9;hb=edf01df130d0d1877461561178b8833a9ab6051c;hp=cbb13420fb1573ad76e31e2b7eb6a1057e0fa51c;hpb=3ae1efa7401791e42e3171f4db2cc2d38adde088;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/minigames/minigame/snake.qc b/qcsrc/common/minigames/minigame/snake.qc index cbb13420f..617ed957c 100644 --- a/qcsrc/common/minigames/minigame/snake.qc +++ b/qcsrc/common/minigames/minigame/snake.qc @@ -38,7 +38,7 @@ int autocvar_sv_minigames_snake_lives = 3; bool snake_alone(entity minig) { int headcount = 0; - entity e = world; + entity e = NULL; while ( ( e = findentity(e,owner,minig) ) ) if ( e.classname == "minigame_board_piece" && e.cnt == 1 ) ++headcount; @@ -49,21 +49,21 @@ bool snake_alone(entity minig) // find same game piece given its tile name entity snake_find_piece(entity minig, string tile) { - entity e = world; + entity e = NULL; while ( ( e = findentity(e,owner,minig) ) ) if ( e.classname == "minigame_board_piece" && e.netname == tile ) return e; - return world; + return NULL; } // find same game piece given its cnt entity snake_find_cnt(entity minig, int steam, int tile) { - entity e = world; + entity e = NULL; while ( ( e = findentity(e,owner,minig) ) ) if ( e.classname == "minigame_board_piece" && e.cnt == tile && e.team == steam ) return e; - return world; + return NULL; } // check if the tile name is valid (15x15 grid) @@ -78,11 +78,11 @@ bool snake_valid_tile(string tile) entity snake_find_head(entity minig, int steam) { - entity e = world; + entity e = NULL; while ( ( e = findentity(e,owner,minig) ) ) if ( e.classname == "minigame_board_piece" && e.cnt == 1 && e.team == steam ) return e; - return world; + return NULL; } void snake_new_mouse(entity minigame) @@ -94,7 +94,7 @@ void snake_new_mouse(entity minigame) { string pos = minigame_tile_buildname(i, j); if(!snake_find_piece(minigame, pos)) - RandomSelection_Add(world, 0, pos, 1, 1); + RandomSelection_Add(NULL, 0, pos, 1, 1); } entity piece = msle_spawn(minigame,"minigame_board_piece"); @@ -153,16 +153,16 @@ void snake_check_winner(entity minigame) } void snake_move_head(entity minigame, entity head); -void snake_head_think() +void snake_head_think(entity this) { - entity minigame = self.owner; + entity minigame = this.owner; if(minigame.minigame_flags & SNAKE_TURN_MOVE) - snake_move_head(minigame, self); + snake_move_head(minigame, this); snake_check_winner(minigame); - self.nextthink = time + self.snake_delay; + this.nextthink = time + this.snake_delay; } void minigame_setup_snake(entity minigame, int pteam) @@ -174,17 +174,17 @@ void minigame_setup_snake(entity minigame, int pteam) { string pos = minigame_tile_buildname(i, j); if(!snake_find_piece(minigame, pos)) - RandomSelection_Add(world, 0, pos, 1, 1); + RandomSelection_Add(NULL, 0, pos, 1, 1); } entity piece = msle_spawn(minigame,"minigame_board_piece"); piece.team = pteam; piece.netname = strzone(RandomSelection_chosen_string); piece.cnt = 1; - piece.snake_next = world; - piece.snake_prev = world; + piece.snake_next = NULL; + piece.snake_prev = NULL; piece.snake_last = piece; - piece.think = snake_head_think; + setthink(piece, snake_head_think); piece.snake_delay = autocvar_sv_minigames_snake_delay_initial; piece.nextthink = time + 0.1; minigame_server_sendflags(piece,MINIG_SF_ALL); @@ -203,13 +203,13 @@ entity snake_get_player(entity minigame, int pteam) #ifdef SVQC for(e = minigame.minigame_players; e; e = e.list_next) #elif defined(CSQC) - e = world; + e = NULL; while( (e = findentity(e,owner,minigame)) ) if ( e.classname == "minigame_player" ) #endif if(e.team == pteam) return e; - return world; + return NULL; } void snake_add_score(entity minigame, int pteam, int thescore) @@ -255,7 +255,7 @@ void snake_move_body(entity minigame, entity head, bool ate_mouse) piece.team = head.team; piece.snake_prev = tail; piece.snake_dir = tail.snake_dir; - piece.snake_next = world; + piece.snake_next = NULL; piece.snake_tail = true; piece.netname = strzone(tail.netname); @@ -282,7 +282,7 @@ void snake_eat_team(entity minigame, int pteam) head.nextthink = time + 1; // make sure they don't to eat us somehow - entity e = world; + entity e = NULL; while ( ( e = findentity(e,owner,minigame) ) ) if ( e.classname == "minigame_board_piece" && e.cnt && e.team == pteam ) { @@ -294,7 +294,7 @@ void snake_eat_team(entity minigame, int pteam) minigame.snake_lost_teams |= BIT(pteam); if(pl && minigame.snake_lives[pteam] > 0) - minigame_setup_snake(minigame, pteam); + minigame_setup_snake(minigame, pteam); } void snake_move_head(entity minigame, entity head) @@ -415,12 +415,12 @@ int snake_server_event(entity minigame, string event, ...) } else minigame.snake_lives[1] = 1; - + return true; } case "end": { - entity e = world; + entity e = NULL; while( (e = findentity(e, owner, minigame)) ) if(e.classname == "minigame_board_piece") { @@ -465,8 +465,8 @@ int snake_server_event(entity minigame, string event, ...) { switch(argv(0)) { - case "move": - snake_move(minigame, ...(0,entity), ((...(1,int)) >= 2 ? argv(1) : string_null), ((...(1,int)) == 3 ? argv(2) : string_null)); + case "move": + snake_move(minigame, ...(0,entity), ((...(1,int)) >= 2 ? argv(1) : string_null), ((...(1,int)) == 3 ? argv(2) : string_null)); return true; } @@ -506,7 +506,7 @@ int snake_server_event(entity minigame, string event, ...) return false; } } - + return false; } @@ -539,7 +539,7 @@ void snake_hud_board(vector pos, vector mySize) minigame_hud_fitsqare(pos, mySize); snake_boardpos = pos; snake_boardsize = mySize; - + minigame_hud_simpleboard(pos,mySize,minigame_texture("snake/board")); vector tile_size = minigame_hud_denormalize_size('1 1 0' / SNAKE_TILE_SIZE,pos,mySize); @@ -633,7 +633,7 @@ void snake_hud_board(vector pos, vector mySize) } else { - minigame_drawpic_centered( tile_pos, + minigame_drawpic_centered( tile_pos, minigame_texture(thepiece), tile_size, tile_color, panel_fg_alpha, DRAWFLAG_NORMAL ); } @@ -654,17 +654,17 @@ void snake_hud_board(vector pos, vector mySize) victory_text = "You win!"; if(active_minigame.snake_lives[minigame_self.team] <= 0) victory_text = "You ran out of lives!"; - + vector win_pos = pos+eY*(mySize_y-winfs_y)/2; vector win_sz; win_sz = minigame_drawcolorcodedstring_wrapped(mySize_x,win_pos, - sprintf("%s %s", victory_text, scores_text), + sprintf("%s %s", victory_text, scores_text), winfs, 0, DRAWFLAG_NORMAL, 0.5); - + drawfill(win_pos-eY*hud_fontsize_y,win_sz+2*eY*hud_fontsize_y,'0.3 0.3 1',0.8,DRAWFLAG_ADDITIVE); - + minigame_drawcolorcodedstring_wrapped(mySize_x,win_pos, - sprintf("%s %s", victory_text, scores_text), + sprintf("%s %s", victory_text, scores_text), winfs, panel_fg_alpha, DRAWFLAG_NORMAL, 0.5); } } @@ -677,22 +677,14 @@ void snake_hud_status(vector pos, vector mySize) vector ts; ts = minigame_drawstring_wrapped(mySize_x,pos,active_minigame.descriptor.message, hud_fontsize * 2, '0.25 0.47 0.72', panel_fg_alpha, DRAWFLAG_NORMAL,0.5); - + ts_y += hud_fontsize_y; pos_y += ts_y; mySize_y -= ts_y; vector player_fontsize = hud_fontsize * 1.75; - ts_y = ( mySize_y - 2*player_fontsize_y ) / SNAKE_TEAMS; + ts_y = ( mySize_y - SNAKE_TEAMS*player_fontsize_y ) / SNAKE_TEAMS; ts_x = mySize_x; vector mypos; - vector tile_size = '48 48 0'; - - mypos = pos; - if ( minigame_self.team > 1 ) - mypos_y += player_fontsize_y + (ts_y * (minigame_self.team - 1)); - drawfill(mypos,eX*mySize_x+eY*player_fontsize_y,'1 1 1',0.5,DRAWFLAG_ADDITIVE); - mypos_y += player_fontsize_y; - drawfill(mypos,eX*mySize_x+eY*tile_size_y,'1 1 1',0.25,DRAWFLAG_ADDITIVE); entity e; FOREACH_MINIGAME_ENTITY(e) @@ -700,28 +692,21 @@ void snake_hud_status(vector pos, vector mySize) if ( e.classname == "minigame_player" ) { mypos = pos; - if ( e.team > 1 ) - mypos_y += player_fontsize_y + (ts_y * (e.team - 1)); - minigame_drawcolorcodedstring_trunc(mySize_x,mypos, - GetPlayerName(e.minigame_playerslot-1), - player_fontsize, panel_fg_alpha, DRAWFLAG_NORMAL); - - vector tile_color = snake_teamcolor(e.team); + mypos_y += (e.team-1) * (player_fontsize_y + ts_y); - mypos_y += player_fontsize_y; - drawpic( mypos, - minigame_texture("snake/head"), - tile_size * 0.7, tile_color, panel_fg_alpha, DRAWFLAG_NORMAL ); + drawfill(mypos, ts, snake_teamcolor(e.team), 0.25, DRAWFLAG_ADDITIVE); - mypos_x += tile_size_x; + minigame_drawcolorcodedstring_trunc(mySize_x,mypos, + entcs_GetName(e.minigame_playerslot-1), + player_fontsize, panel_fg_alpha, DRAWFLAG_NORMAL); - drawstring(mypos,ftos(e.snake_score),tile_size, + drawstring(mypos+eY*player_fontsize_y,ftos(e.snake_score),'48 48 0' * (SNAKE_TEAMS * 0.1), '0.7 0.84 1', panel_fg_alpha, DRAWFLAG_NORMAL); + drawstring(mypos+(eY*player_fontsize_y) + (eX*player_fontsize_x),strcat("1UP: ", ftos(active_minigame.snake_lives[e.team])),'48 48 0' * (SNAKE_TEAMS * 0.1), + '1 0.44 0.54', panel_fg_alpha, DRAWFLAG_NORMAL); - mypos_x += tile_size_x; - - drawstring(mypos,strcat("1UP: ", ftos(active_minigame.snake_lives[e.team])),tile_size * 0.6, - '0.7 0.84 1', panel_fg_alpha, DRAWFLAG_NORMAL); + if ( e == minigame_self ) + drawborderlines(1, mypos, ts, snake_teamcolor(e.team), 1, DRAWFLAG_NORMAL); } } } @@ -741,7 +726,7 @@ string snake_turn_to_string(int turnflags) if(active_minigame.snake_lives[minigame_self.team] <= 0) return _("You ran out of lives!"); - + if ( (snake_find_head(active_minigame, minigame_self.team)).snake_dir == '0 0 0' ) return _("Press an arrow key to begin the game"); @@ -750,7 +735,7 @@ string snake_turn_to_string(int turnflags) return _("Avoid the snake's body, collect the mice!"); else return _("Avoid the screen edges and the snake's body, collect the mice!"); - + return ""; } @@ -850,4 +835,4 @@ int snake_client_event(entity minigame, string event, ...) return false; } -#endif \ No newline at end of file +#endif