Created
June 24, 2019 08:09
-
-
Save MrSmith33/4c860f9d13297b8013b3989669a050cb to your computer and use it in GitHub Desktop.
Roguelike Tutorial 2019 compiled with tiny_jit compiler
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- <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