Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 100 additions & 0 deletions 25d_modles.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
//2.5D modles!
#include <SDL2/SDL.h>
#include <cstdlib>
#include <iostream>

// --- Screen settings ---
const int WIDTH = 400;
const int HEIGHT = 300;

// --- 2.5D models as simple sprites ---
// Enemy sprite (5x5)
const int ENEMY_SIZE = 5;
const char enemy_sprite[ENEMY_SIZE][ENEMY_SIZE] = {
{' ', 'X', 'X', 'X', ' '},
{'X', 'X', 'X', 'X', 'X'},
{'X', 'X', 'X', 'X', 'X'},
{' ', 'X', 'X', 'X', ' '},
{' ', 'X', ' ', 'X', ' '}
};

// Health pack sprite (5x5)
const char health_sprite[ENEMY_SIZE][ENEMY_SIZE] = {
{' ', 'H', 'H', 'H', ' '},
{'H', 'H', 'H', 'H', 'H'},
{'H', 'H', 'H', 'H', 'H'},
{' ', 'H', 'H', 'H', ' '},
{' ', 'H', ' ', 'H', ' '}
};

// --- Function to draw a sprite ---
void draw_sprite(SDL_Renderer* renderer, const char sprite[][ENEMY_SIZE], int x, int y, int scale, SDL_Color color) {
for (int i = 0; i < ENEMY_SIZE; ++i) {
for (int j = 0; j < ENEMY_SIZE; ++j) {
if (sprite[i][j] != ' ') {
SDL_Rect rect = { x + j * scale, y + i * scale, scale, scale };
SDL_SetRenderDrawColor(renderer, color.r, color.g, color.b, 255);
SDL_RenderFillRect(renderer, &rect);
}
}
}
}

int main(int argc, char* argv[]) {
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
std::cerr << "SDL could not initialize: " << SDL_GetError() << "\n";
return 1;
}

SDL_Window* window = SDL_CreateWindow("2.5D DOOM Models",
SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
WIDTH, HEIGHT, SDL_WINDOW_SHOWN);

if (!window) {
std::cerr << "Window could not be created: " << SDL_GetError() << "\n";
SDL_Quit();
return 1;
}

SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
if (!renderer) {
std::cerr << "Renderer could not be created: " << SDL_GetError() << "\n";
SDL_DestroyWindow(window);
SDL_Quit();
return 1;
}

bool running = true;
SDL_Event event;

// Example "distances" for 2.5D scaling
int enemy_distance = 10; // smaller = closer
int health_distance = 20;

while (running) {
while (SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT) running = false;
}

// Clear screen
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
SDL_RenderClear(renderer);

// Calculate scale based on distance
int enemy_scale = 50 / enemy_distance; // bigger = closer
int health_scale = 50 / health_distance;

// Draw enemy and health
draw_sprite(renderer, enemy_sprite, 50, 50, enemy_scale, {255, 0, 0, 255});
draw_sprite(renderer, health_sprite, 200, 50, health_scale, {0, 255, 0, 255});

SDL_RenderPresent(renderer);

SDL_Delay(16); // ~60 FPS
}

SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}