summaryrefslogtreecommitdiff
path: root/src/base/arena.c
diff options
context:
space:
mode:
authorConnor Thomson <blumatrikz@gmail.com>2026-09-08 18:27:39 -0700
committerConnor Thomson <blumatrikz@gmail.com>2026-09-08 18:27:39 -0700
commitf1ddc12b68b4e4c8087962de25260470e6df2bea (patch)
tree7d0440a6402a9b0ef75ded23fa64b68534255bba /src/base/arena.c
parent6025860a61386bf767b29c3ec5fd0d31285f1056 (diff)
Add tuxanci2 files
Diffstat (limited to 'src/base/arena.c')
-rw-r--r--src/base/arena.c392
1 files changed, 0 insertions, 392 deletions
diff --git a/src/base/arena.c b/src/base/arena.c
deleted file mode 100644
index 6d883b3..0000000
--- a/src/base/arena.c
+++ /dev/null
@@ -1,392 +0,0 @@
-#include <stdlib.h>
-#include <assert.h>
-#include <string.h>
-
-#include "main.h"
-#include "arena.h"
-#include "list.h"
-#include "tux.h"
-#include "shot.h"
-#include "item.h"
-#include "myTimer.h"
-#include "modules.h"
-
-#ifndef PUBLIC_SERVER
-#include "hotKey.h"
-#include "world.h"
-#include "setting.h"
-#include "layer.h"
-#endif /* PUBLIC_SERVER */
-
-static arena_t *currentArena;
-static int splitType;
-
-#ifndef PUBLIC_SERVER
-static int isBigArena(arena_t *arena)
-{
- if (arena->w > WINDOW_SIZE_X || arena->h > WINDOW_SIZE_Y) {
- return 1;
- } else {
- return 0;
- }
-}
-
-static int isTuxNear(tux_t *tux1, tux_t *tux2)
-{
- if (abs(tux1->x - tux2->x) < WINDOW_SIZE_X &&
- abs(tux1->y - tux2->y) < WINDOW_SIZE_Y) {
- return 1;
- }
-
- return 0;
-}
-#endif /* PUBLIC_SERVER */
-
-void arena_set_current(arena_t *p)
-{
- currentArena = p;
-}
-
-arena_t *arena_get_current()
-{
- return currentArena;
-}
-
-void hotkey_splitArena()
-{
- if (splitType == SCREEN_SPLIT_VERTICAL) {
- splitType = SCREEN_SPLIT_HORIZONTAL;
- } else {
- splitType = SCREEN_SPLIT_VERTICAL;
- }
-}
-
-#ifndef PUBLIC_SERVER
-void arena_init()
-{
- splitType = SCREEN_SPLIT_VERTICAL;
-
- if (getParam("--split-vertical")) {
- splitType = SCREEN_SPLIT_VERTICAL;
- debug("Set vertical screen splitting");
- }
-
- if (getParam("--split-horizontal")) {
- splitType = SCREEN_SPLIT_HORIZONTAL;
- debug("Set horizontal screen splitting");
- }
-
- hot_key_register(SDLK_F3, hotkey_splitArena);
-}
-
-void arena_quit()
-{
- hot_key_unregister(SDLK_F3);
-}
-#endif /* PUBLIC_SERVER */
-
-arena_t *arena_new(int w, int h)
-{
- arena_t *new;
- int zone_w, zone_h;
-
- new = malloc(sizeof(arena_t));
-
-#ifndef PUBLIC_SERVER
- new->background = NULL;
- strcpy(new->music, "");
-#endif /* PUBLIC_SERVER */
-
- new->w = w;
- new->h = h;
-
- new->listTimer = list_new();
-
- if (w > 800 || h > 600) {
- zone_w = 320;
- zone_h = 240;
- } else {
- zone_w = 80;
- zone_h = 60;
- }
-
- new->spaceTux = space_new(w, h, zone_w, zone_h, tux_get_status, tux_set_status);
- new->spaceItem = space_new(w, h, zone_w, zone_h, item_get_status, item_set_status);
- new->spaceShot = space_new(w, h, zone_w, zone_h, shot_get_status, shot_set_status);
-
- new->countRound = 0;
- new->max_countRound = 0;
-
- return new;
-}
-
-int arena_conflict_space(int x1, int y1, int w1, int h1, int x2, int y2, int w2, int h2)
-{
- return (x1 < x2 + w2 && x2 < x1 + w1 && y1 < y2 + h2 && y2 < y1 + h1);
-}
-
-int arena_is_free_space(arena_t *arena, int x, int y, int w, int h)
-{
- if ((x < 0 || y < 0 || x + w > arena->w || y + h > arena->h) ||
- space_is_conflict_with_object(arena->spaceTux, x, y, w, h) ||
- space_is_conflict_with_object(arena->spaceShot, x, y, w, h) ||
- space_is_conflict_with_object(arena->spaceItem, x, y, w, h) ||
- space_is_conflict_with_object(arena->spaceShot, x, y, w, h) ||
- module_is_conflict(x, y, w, h)) {
- return 0;
- }
-
- return 1;
-}
-
-void arena_find_free_space(arena_t *arena, int *x, int *y, int w, int h)
-{
- int z_x;
- int z_y;
-
- assert(x != NULL);
- assert(y != NULL);
-
- do {
- z_x = random() % (arena->w - w);
- z_y = random() % (arena->h - h);
- } while (arena_is_free_space(arena, z_x, z_y, w, h) == 0);
-
- *x = z_x;
- *y = z_y;
-}
-
-void arena_get_center_screen(int *screen_x, int *screen_y, int x, int y, int screen_size_x, int screen_size_y)
-{
- arena_t *arena;
-
- arena = arena_get_current();
-
- *screen_x = x - screen_size_x / 2;
- *screen_y = y - screen_size_y / 2;
-
- if (*screen_x < 0) {
- *screen_x = 0;
- }
-
- if (*screen_y < 0) {
- *screen_y = 0;
- }
-
- if (*screen_x + screen_size_x >= arena->w) {
- *screen_x = arena->w - screen_size_x;
- }
-
- if (*screen_y + screen_size_y >= arena->h) {
- *screen_y = arena->h - screen_size_y;
- }
-}
-
-#ifndef PUBLIC_SERVER
-static void drawBackground(arena_t *arena, int screen_x, int screen_y)
-{
- if (isBigArena(arena)) {
- int i, j;
-
- for (i = screen_y / arena->background->h;
- i <= screen_y / arena->background->h + WINDOW_SIZE_Y / arena->background->h + 1;
- i++) {
- for (j = screen_x / arena->background->w;
- j <= screen_x / arena->background->w + WINDOW_SIZE_X / arena->background->w + 1;
- j++) {
- addLayer(arena->background, j * arena->background->w,
- i * arena->background->h, 0, 0, arena->background->w,
- arena->background->h, -100);
-
- /*count++;*/
- }
- }
- } else {
- addLayer(arena->background, 0, 0, 0, 0, arena->background->w, arena->background->h, -100);
- }
-}
-
-static void action_tux_draw(space_t *space, tux_t *tux, void *p)
-{
- tux_draw(tux);
-}
-
-static void action_item_draw(space_t *space, item_t *item, void *p)
-{
- item_draw(item);
-}
-
-static void action_shot_draw(space_t *space, shot_t *shot, void *p)
-{
- shot_draw(shot);
-}
-
-static void drawObjects(arena_t *arena, int screen_x, int screen_y)
-{
- space_action_from_location(arena->spaceTux, action_tux_draw, NULL, screen_x, screen_y, WINDOW_SIZE_X, WINDOW_SIZE_Y);
- space_action_from_location(arena->spaceItem, action_item_draw, NULL, screen_x, screen_y, WINDOW_SIZE_X, WINDOW_SIZE_Y);
- space_action_from_location(arena->spaceShot, action_shot_draw, NULL, screen_x, screen_y, WINDOW_SIZE_X, WINDOW_SIZE_Y);
-
- module_draw(screen_x, screen_y, WINDOW_SIZE_X, WINDOW_SIZE_Y);
-}
-
-static void drawSplitArenaForTux(arena_t *arena, tux_t *tux, int location_x, int location_y)
-{
- int screen_x, screen_y;
-
- switch (splitType) {
- case SCREEN_SPLIT_HORIZONTAL:
- arena_get_center_screen(&screen_x, &screen_y, tux->x, tux->y, WINDOW_SIZE_X, WINDOW_SIZE_Y / 2);
- break;
- case SCREEN_SPLIT_VERTICAL:
- arena_get_center_screen(&screen_x, &screen_y, tux->x, tux->y, WINDOW_SIZE_X / 2, WINDOW_SIZE_Y);
- break;
- default:
- screen_x = -1;
- screen_y = -1;
- fatal("Unknown method of splitting the screen");
- break;
- }
-
- drawBackground(arena, screen_x, screen_y);
- drawObjects(arena, screen_x, screen_y);
-
- switch (splitType) {
- case SCREEN_SPLIT_HORIZONTAL:
- layer_draw_slpit(location_x, location_y, screen_x, screen_y, WINDOW_SIZE_X, WINDOW_SIZE_Y / 2);
- break;
- case SCREEN_SPLIT_VERTICAL:
- layer_draw_slpit(location_x, location_y, screen_x, screen_y, WINDOW_SIZE_X / 2, WINDOW_SIZE_Y);
- break;
- default:
- screen_x = -1;
- screen_y = -1;
- fatal("Unknown method of splitting the screen");
- break;
- }
-}
-
-void drawSplitArena(arena_t *arena)
-{
- tux_t *tux = NULL;
-
- tux = world_get_control_tux(TUX_CONTROL_KEYBOARD_RIGHT);
-
- if (tux != NULL) {
- switch (splitType) {
- case SCREEN_SPLIT_HORIZONTAL:
- drawSplitArenaForTux(arena, tux, 0, WINDOW_SIZE_Y / 2);
- break;
- case SCREEN_SPLIT_VERTICAL:
- drawSplitArenaForTux(arena, tux, WINDOW_SIZE_X / 2, 0);
- break;
- }
- }
-
- tux = world_get_control_tux(TUX_CONTROL_KEYBOARD_LEFT);
-
- if (tux != NULL) {
- drawSplitArenaForTux(arena, tux, 0, 0);
- }
-}
-
-void drawCenterArena(arena_t *arena, int x, int y)
-{
- int screen_x, screen_y;
-
- arena_get_center_screen(&screen_x, &screen_y, x, y, WINDOW_SIZE_X, WINDOW_SIZE_Y);
- drawBackground(arena, screen_x, screen_y);
- drawObjects(arena, screen_x, screen_y);
- layer_draw_center(x, y);
-}
-
-void drawSimpleArena(arena_t *arena)
-{
- int screen_x, screen_y;
- tux_t *tux = NULL;
-
- tux = world_get_control_tux(TUX_CONTROL_KEYBOARD_RIGHT);
-
- if (tux == NULL) {
- return;
- }
-
- screen_x = 0;
- screen_y = 0;
-
- drawBackground(arena, screen_x, screen_y);
- drawObjects(arena, screen_x, screen_y);
- layer_draw_all(tux->x, tux->y);
-}
-
-void arena_draw(arena_t *arena)
-{
- if (isBigArena(arena) &&
- net_multiplayer_get_game_type() == NET_GAME_TYPE_NONE && !setting_is_ai()) {
- tux_t *tux1;
- tux_t *tux2;
-
- tux1 = world_get_control_tux(TUX_CONTROL_KEYBOARD_RIGHT);
- tux2 = world_get_control_tux(TUX_CONTROL_KEYBOARD_LEFT);
-
- if (isTuxNear(tux1, tux2)) {
- drawCenterArena(arena, (tux1->x + tux2->x) / 2, (tux1->y + tux2->y) / 2);
- } else {
- drawSplitArena(arena);
- }
-
- return;
- }
-
- if (isBigArena(arena)) {
- tux_t *tux = NULL;
-
- tux = world_get_control_tux(TUX_CONTROL_KEYBOARD_RIGHT);
-
- if (tux == NULL) {
- return;
- }
-
- drawCenterArena(arena, tux->x, tux->y);
- return;
- }
-
- drawSimpleArena(arena);
-}
-
-#endif /* PUBLIC_SERVER */
-
-static void action_tux(space_t *space, tux_t *tux, void *p)
-{
- tux_event(tux);
-}
-
-void arena_event(arena_t *arena)
-{
- int i;
-
- for (i = 0; i < 8; i++) {
- shot_check_is_tux_screen(arena);
-
- item_event_conglicts_shot_with_item(arena);
- tux_conflict_woth_shot(arena);
- module_event();
-
- shot_event_move_list(arena);
- }
-
- item_event(arena->spaceItem);
-
- space_action(arena->spaceTux, action_tux, NULL);
-
- timer_event(arena->listTimer);
-}
-
-void arena_destroy(arena_t *p)
-{
- space_destroy_with_item(p->spaceTux, tux_destroy);
- space_destroy_with_item(p->spaceItem, item_destroy);
- space_destroy_with_item(p->spaceShot, shot_destroy);
- timer_destroy(p->listTimer);
- free(p);
-}