Skip to content

Instantly share code, notes, and snippets.

@MrSmith33
Created June 24, 2019 08:09
Show Gist options
  • Save MrSmith33/4c860f9d13297b8013b3989669a050cb to your computer and use it in GitHub Desktop.
Save MrSmith33/4c860f9d13297b8013b3989669a050cb to your computer and use it in GitHub Desktop.
Roguelike Tutorial 2019 compiled with tiny_jit compiler
--- <cli_args>
main.d sdl.d sdlimage.d kernel32.d C:\Windows\System32\kernel32.dll SDL2.dll SDL2_image.dll
--- main.d
import sdl;
import sdlimage;
import kernel32;
enum scale = 2;
enum map_width = 10;
enum map_height = 10;
enum i32 TILE_W = 10;
enum i32 TILE_H = 10;
i32 main(void* hInstance, void* hPrevInstance, u8* lpCmdLine, i32 nShowCmd)
{
SDL_SetMainReady();
if(SDL_Init(SDL_INIT_VIDEO) != 0) {
return 1;
}
i32 SCREEN_WIDTH = map_width * scale * TILE_W;
i32 SCREEN_HEIGHT = map_height * scale * TILE_H;
void* window = SDL_CreateWindow("RLT tiny_jit",
SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 200, 200, SDL_WINDOW_SHOWN);
if (window == null) {
return 2;
}
void* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
if (renderer == null) {
return 3;
}
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0);
i32 flags = IMG_INIT_PNG;
i32 initted = IMG_Init(flags);
if((initted & flags) != flags) {
return 4;
}
void* temp_surf = IMG_Load("arial10x10.png");
if (temp_surf == null) return 5;
void* font = SDL_CreateTextureFromSurface(renderer, temp_surf);
if (font == null) return 6;
SDL_FreeSurface(temp_surf);
bool run = true;
SDL_Event e;
i32 player_x = 1;
i32 player_y = 1;
while (run)
{
while (SDL_PollEvent(&e) != 0)
{
if (e.type == SDL_EventType.SDL_QUIT) {
run = false;
}
else if (e.type == SDL_EventType.SDL_KEYDOWN)
{
SDL_KeyboardEvent* key = cast(SDL_KeyboardEvent*)&e;
if (key.keysym.scancode == SDL_Scancode.SDL_SCANCODE_D) {
++player_x;
} else if (key.keysym.scancode == SDL_Scancode.SDL_SCANCODE_A) {
--player_x;
} else if (key.keysym.scancode == SDL_Scancode.SDL_SCANCODE_W) {
--player_y;
} else if (key.keysym.scancode == SDL_Scancode.SDL_SCANCODE_S) {
++player_y;
}
}
}
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0);
SDL_RenderClear(renderer);
SDL_Rect from;
SDL_Rect to;
from.w = TILE_W;
from.h = TILE_H;
from.x = 0 * TILE_W;
from.y = 1 * TILE_H;
to.w = TILE_W * scale;
to.h = TILE_H * scale;
to.x = player_x * scale * TILE_W;
to.y = player_y * scale * TILE_H;
SDL_SetTextureColorMod(font, 0, 255, 0);
SDL_RenderCopy(renderer, font, &from, &to);
SDL_RenderPresent(renderer);
}
SDL_DestroyTexture(font);
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
IMG_Quit();
SDL_Quit();
ExitProcess(0);
return 0;
}
--- sdl.d
void SDL_SetMainReady();
i32 SDL_Init(u32);
void SDL_Quit();
void* SDL_CreateWindow(u8* title, i32 x, i32 y, i32 w, i32 h, u32 flags);
void* SDL_CreateRenderer(void* window, i32 index, u32 flags);
void SDL_DestroyRenderer(void* renderer);
void SDL_DestroyWindow(void* renderer);
i32 SDL_PollEvent(SDL_Event* event);
u8* SDL_GetError();
i32 SDL_SetRenderDrawColor(void*, u8 r, u8 g, u8 b, u8 a);
i32 SDL_SetRenderDrawBlendMode(void* renderer, u32 blendMode);
i32 SDL_SetTextureColorMod(void* texture, u8 r, u8 g, u8 b);
enum SDL_BlendMode {
SDL_BLENDMODE_NONE = 0x00000000,
SDL_BLENDMODE_BLEND = 0x00000001,
SDL_BLENDMODE_ADD = 0x00000002,
SDL_BLENDMODE_MOD = 0x00000004
}
struct SDL_Event
{
u32 type;
u8[52] padding;
}
enum SDL_EventType {
SDL_FIRSTEVENT = 0,
SDL_QUIT = 0x100,
SDL_KEYDOWN = 0x300,
SDL_KEYUP = 0x301,
}
struct SDL_KeyboardEvent {
u32 type;
u32 timestamp;
u32 windowID;
u8 state;
u8 repeat;
u8 padding2;
u8 padding3;
SDL_Keysym keysym;
}
struct SDL_Keysym {
u32 scancode;
u32 sym;
u16 mod;
u32 unicode;
}
enum SDL_Scancode {
SDL_SCANCODE_A = 4,
SDL_SCANCODE_D = 7,
SDL_SCANCODE_S = 22,
SDL_SCANCODE_W = 26,
}
enum u32 SDL_INIT_VIDEO = 0x00000020;
enum u32 SDL_RENDERER_SOFTWARE = 0x00000001;
enum u32 SDL_RENDERER_ACCELERATED = 0x00000002;
enum u32 SDL_RENDERER_PRESENTVSYNC = 0x00000004;
enum u32 SDL_RENDERER_TARGETTEXTURE = 0x00000008;
enum i32 SDL_WINDOWPOS_UNDEFINED = 0x1FFF0000;
enum u32 SDL_WINDOW_SHOWN = 0x00000004;
void* SDL_CreateTextureFromSurface(void* renderer, void* surface);
void SDL_FreeSurface(void*);
void SDL_DestroyTexture(void*);
i32 SDL_RenderClear(void*);
// int SDL_RenderCopy(SDL_Renderer*,SDL_Texture*,const(SDL_Rect)*,const(SDL_Rect*));
i32 SDL_RenderCopy(void*, void*, SDL_Rect*, SDL_Rect*);
void SDL_RenderPresent(void*);
struct SDL_Rect
{
i32 x;
i32 y;
i32 w;
i32 h;
}
--- sdlimage.d
i32 IMG_Init(i32 flags);
i32 IMG_Quit();
void* IMG_Load(u8*);
enum {
IMG_INIT_JPG = 0x00000001,
IMG_INIT_PNG = 0x00000002,
IMG_INIT_TIF = 0x00000004,
IMG_INIT_WEBP = 0x00000008,
}
--- kernel32.d
void ExitProcess(u32 uExitCode);
u8 WriteConsoleA(
void* hConsoleOutput,
u8* lpBuffer,
u32 nNumberOfCharsToWrite,
u32* lpNumberOfCharsWritten,
void* lpReserved
);
void* GetStdHandle(u32 nStdHandle);
enum : u32 {
STD_INPUT_HANDLE = 0xFFFFFFF6,
STD_OUTPUT_HANDLE = 0xFFFFFFF5,
STD_ERROR_HANDLE = 0xFFFFFFF4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment