Difference between revisions of "1K Intro"
Line 30: | Line 30: | ||
* ExitProcess(0) - Close down application | * ExitProcess(0) - Close down application | ||
− | + | == Graphics / effect == | |
+ | |||
* Passed time via glColor (no uniforms used) | * Passed time via glColor (no uniforms used) | ||
* GLSL Shadercode | * GLSL Shadercode | ||
− | + | == Sound == | |
* Win32 Single Note MIDI | * Win32 Single Note MIDI | ||
* Win32 MIDI player | * Win32 MIDI player | ||
Line 41: | Line 42: | ||
* Shader softsynth | * Shader softsynth | ||
− | + | == Compression == | |
* Microsoft Cabinet decmpression | * Microsoft Cabinet decmpression | ||
+ | These functions allow for MSZIP (deflate) and MSLZ content to be loaded from the binary as payload at the cost of a a few more win32 function imports. Well this might be a good solution for 512 byte intros, the tipping point for Crinkler compression at the moment lies at the 800-850 byte mark give or take. | ||
+ | |||
* Crinkler | * Crinkler | ||
+ | Crinkler is the most commonly used compression at the moment for many 1K and 4K intros. | ||
+ | It has a seperate settings for 1K intro, namely /TINYIMPORT and /TINYHEADER which will better match the 1K usecase. | ||
+ | |||
+ | === Crinkler reports === | ||
+ | When using the /REPORT:intro_report.html feature, crinkler will generate a report and heatmap for your intro binary. | ||
+ | This is helpful to see how good your (shader)code compresses and where you can maybe gain a few more bytes. | ||
+ | |||
+ | === Word about resulting exes === | ||
+ | Please note that when using crinkler in TINYEXPORT mode, the resulting windows header will most likely trigger virus scanners / microsoft defender and mark it as suspicious content, which is a side-effect in recent years. Just exclude your work directory from this scan during development. Compo machines will run without these scanners too, but it is good practice to include a (slightly larger) safe version too in the final archive. | ||
== Frameworks == | == Frameworks == |
Revision as of 04:32, 12 April 2024
Contents
Introduction
This category is dedicated to 1K Intros for Windows 32.
Windows 1K Intros can be setup in C or Aseembler, or a combination of both, with only the few windows calls that are used being linked in. In general writing everything in assembler should give you a little more freedom in pushing/popping your function arguments but in th past quality intros have been written in both languages.
Graphics are usualy done using OpenGL / GLSL, but there are 1K intros out there that have used D3D instead.
Setup (Windows)
- ChangeDisplaySettings(&screenSettings, CDS_FULLSCREEN) - Initialise fullscreen view
- hwnd = CreateWindow((LPCSTR)0xC018, 0, WS_POPUP | WS_VISIBLE | WS_MAXIMIZE, 0, 0, 0, 0, 0, 0, 0, 0) - Setting up a Maximised Window
- GetDC(hwnd) - Get DeviceContext handle
- ChoosePixelFormat(hDC, &pfd) - Set pixelformat describer by pfd to DeviceContext handle
- ShowCursor(NULL) - Hide mousecursor (usually required by compo rules)
Setup (OpenGL)
- glContent = wglCreateContext(hDC) - Create OpenGL context
- wglMakeCurrent(hDC, glContext) - Set OpenGL Context
- shaderProgam = glCreateShaderProgramv(GL_FRAGMENT_SHADER, 1, &shader) - Create and compile GLSL Shader
- glUseProgram(shaderProgram) - Set active shader
Update Loop
- t = GetTickCount() - Optional: Get Current ticks
- glColor3us(t,0,0) / glColor3i(t,0,0) - Parse time via gl_Color (saves importing uniform functions)
- glRects(-1,-1,1,1) - Draw a single quad with current Shader
- SwapBuffers(hDC) - Swap Buffers
- GetAsyncKeyState(VK_ESCAPE) - Checks for escape key (required by compo rules)
Closedown
- ExitProcess(0) - Close down application
Graphics / effect
- Passed time via glColor (no uniforms used)
- GLSL Shadercode
Sound
- Win32 Single Note MIDI
- Win32 MIDI player
- Bytebeat softsynth
- Shader softsynth
Compression
- Microsoft Cabinet decmpression
These functions allow for MSZIP (deflate) and MSLZ content to be loaded from the binary as payload at the cost of a a few more win32 function imports. Well this might be a good solution for 512 byte intros, the tipping point for Crinkler compression at the moment lies at the 800-850 byte mark give or take.
- Crinkler
Crinkler is the most commonly used compression at the moment for many 1K and 4K intros. It has a seperate settings for 1K intro, namely /TINYIMPORT and /TINYHEADER which will better match the 1K usecase.
Crinkler reports
When using the /REPORT:intro_report.html feature, crinkler will generate a report and heatmap for your intro binary. This is helpful to see how good your (shader)code compresses and where you can maybe gain a few more bytes.
Word about resulting exes
Please note that when using crinkler in TINYEXPORT mode, the resulting windows header will most likely trigger virus scanners / microsoft defender and mark it as suspicious content, which is a side-effect in recent years. Just exclude your work directory from this scan during development. Compo machines will run without these scanners too, but it is good practice to include a (slightly larger) safe version too in the final archive.