@ -908,12 +908,6 @@
( SetProcessDpiAwarenessContext DPI_AWARENESS_CONTEXT_SYSTEM_AWARE ) ) )
( data-bundle-load-all-resources )
( var device-dpi ( unsigned char ) 144 )
;; 1 point = 1/72". Accurate if device-dpi is properly set
( var large-font-size-points ( unsigned char ) 38 )
( var small-font-size-points ( unsigned char ) 20 )
( var code-font-size-points ( unsigned char ) 20 )
( SDL_GL_SetAttribute SDL_GL_CONTEXT_MAJOR_VERSION 4 )
( SDL_GL_SetAttribute SDL_GL_CONTEXT_MINOR_VERSION 6 )
( SDL_SetHint SDL_HINT_RENDER_VSYNC "1" )
@ -930,43 +924,73 @@
( return 1 ) )
( defer ( SDL_DestroyRenderer renderer ) )
( var ubuntu-regular-large-font-atlas font-atlas ( array 0 ) )
( defer ( free-font-atlas ( addr ubuntu-regular-large-font-atlas ) ) )
( var ubuntu-regular-large-texture ( * SDL_Texture ) null )
( defer ( when ubuntu-regular-large-texture ( SDL_DestroyTexture ubuntu-regular-large-texture ) ) )
( unless ( make-font-atlas-and-texture renderer
( addr ubuntu-regular-large-font-atlas )
( addr ubuntu-regular-large-texture )
s-start-ubuntu-regular-font
( - s-end-ubuntu-regular-font s-start-ubuntu-regular-font )
device-dpi
large-font-size-points )
( return 1 ) )
;;
;; Fonts
;;
( var ubuntu-regular-small-font-atlas font-atlas ( array 0 ) )
( defer ( free-font-atlas ( addr ubuntu-regular-small-font-atlas ) ) )
( var ubuntu-regular-small-texture ( * SDL_Texture ) null )
( defer ( when ubuntu-regular-small-texture ( SDL_DestroyTexture ubuntu-regular-small-texture ) ) )
( unless ( make-font-atlas-and-texture renderer
( addr ubuntu-regular-small-font-atlas )
( addr ubuntu-regular-small-texture )
s-start-ubuntu-regular-font
( - s-end-ubuntu-regular-font s-start-ubuntu-regular-font )
device-dpi
small-font-size-points )
( return 1 ) )
( var device-dpi ( unsigned char ) 144 )
;; 1 point = 1/72". Accurate if device-dpi is properly set
( defstruct font-atlas-texture
atlas font-atlas
texture ( * SDL_Texture )
;; Only needed before it is built
start-file-data ( * ( unsigned char ) )
end-file-data ( * ( unsigned char ) )
font-size-points ( unsigned char ) )
( var font-atlases ( [] font-atlas-texture )
( array
( array ;; Heading font, 1080p
( array 0 ) null
s-start-ubuntu-regular-font s-end-ubuntu-regular-font
38 )
( array ;; Body font, 1080p
( array 0 ) null
s-start-ubuntu-regular-font s-end-ubuntu-regular-font
20 )
( array ;; Body code font, 1080p
( array 0 ) null
s-start-ubuntu-mono-font s-end-ubuntu-mono-font
20 )
( array ;; Heading font, 4k
( array 0 ) null
s-start-ubuntu-regular-font s-end-ubuntu-regular-font
58 )
( array ;; Body font, 4k
( array 0 ) null
s-start-ubuntu-regular-font s-end-ubuntu-regular-font
34 )
( array ;; Body code font, 4k
( array 0 ) null
s-start-ubuntu-mono-font s-end-ubuntu-mono-font
34 ) ) )
( var heading-font-index-1080p ( const int ) 0 )
( var body-font-index-1080p ( const int ) 1 )
( var body-code-font-index-1080p ( const int ) 2 )
( var heading-font-index-4k ( const int ) 3 )
( var body-font-index-4k ( const int ) 4 )
( var body-code-font-index-4k ( const int ) 5 )
( var heading-font-index int heading-font-index-1080p )
( var body-font-index int body-font-index-1080p )
( var body-code-font-index int body-code-font-index-1080p )
( var ubuntu-mono-font-atlas font-atlas ( array 0 ) )
( defer ( free-font-atlas ( addr ubuntu-mono-font-atlas ) ) )
( var ubuntu-mono-texture ( * SDL_Texture ) null )
( defer ( when ubuntu-mono-texture ( SDL_DestroyTexture ubuntu-mono-texture ) ) )
( unless ( make-font-atlas-and-texture renderer
( addr ubuntu-mono-font-atlas ) ( addr ubuntu-mono-texture )
s-start-ubuntu-mono-font
( - s-end-ubuntu-mono-font s-start-ubuntu-mono-font )
( defer
( each-item-addr-in-array font-atlases i font ( * font-atlas-texture )
( free-font-atlas ( addr ( path font > atlas ) ) )
( when ( path font > texture )
( SDL_DestroyTexture ( path font > texture ) ) ) ) )
( each-item-addr-in-array font-atlases i font ( * font-atlas-texture )
( unless ( make-font-atlas-and-texture renderer
( addr ( path font > atlas ) )
( addr ( path font > texture ) )
( path font > start-file-data )
( - ( path font > end-file-data ) ( path font > start-file-data ) )
device-dpi
code-font-size-points )
( return 1 ) )
( path font > font-size-points ) )
( return 1 ) ) )
( unless ( power-system-initialize )
( return 1 ) )
@ -1065,6 +1089,7 @@
( var last-power-cycle-ticks Uint64 0 )
( var enable-fullscreen bool false )
( var upscale-to-4k bool false )
( var exit-reason ( * ( const char ) ) null )
( while true
@ -1123,12 +1148,36 @@
( when ( keybind-tapped ( addr s-toggle-debug-overlay-keybind ) ( addr s-key-states ) )
( set s-enable-debug-overlay ( not s-enable-debug-overlay ) ) )
( var window-width int 0 )
( var window-height int 0 )
( SDL_GetWindowSize window ( addr window-width ) ( addr window-height ) )
( var true-window-width int 0 )
( var true-window-height int 0 )
( SDL_GetWindowSize window ( addr true-window-width ) ( addr true-window-height ) )
( if ( > true-window-height 1440 )
( scope
( unless upscale-to-4k
( preslog "Now upscaling 2x\n" ) )
( set heading-font-index heading-font-index-4k )
( set body-font-index body-font-index-4k )
( set body-code-font-index body-code-font-index-4k )
( set upscale-to-4k true ) )
( scope
( when upscale-to-4k
( preslog "No longer upscaling\n" ) )
( set heading-font-index heading-font-index-1080p )
( set body-font-index body-font-index-1080p )
( set body-code-font-index body-code-font-index-1080p )
( set upscale-to-4k false ) ) )
( var virtual-window-width int true-window-width )
( var virtual-window-height int true-window-height )
( set ( field g-wizard-hero x ) ( type-cast ( * window-width 0.08f ) int ) )
( set ( field g-wizard-hero y ) ( - window-height ( / ground-height 2 ) wizard-ground-height ) )
;; We always master to 1080p in "game space". Text is all true window relative
( when upscale-to-4k
( set virtual-window-width 1920 )
( set virtual-window-height 1080 ) )
( set ( field g-wizard-hero x ) ( type-cast ( * virtual-window-width 0.08f ) int ) )
( set ( field g-wizard-hero y ) ( - virtual-window-height ( / ground-height 2 ) wizard-ground-height ) )
( when ( and
( != ( field g-wizard-hero anim ) ( addr anim-wizard-attack ) )
@ -1197,10 +1246,10 @@
atlas ( * font-atlas )
texture ( * SDL_Texture ) )
( var atlases-to-draw ( [] atlas-set )
( array ( array ( addr ubuntu-regular-large-font-atlas )
ubuntu-regular-large-texture )
( array ( addr ubuntu-mono-font-atlas )
ubuntu-mono-texture ) ) )
( array ( array ( addr ( field ( at heading-font-index font-atlases ) atlas ) )
( field ( at heading-font-index font-atlases ) texture ) )
( array ( addr ( field ( at body-code-font-index font-atlases ) atlas ) )
( field ( at body-code-font-index font-atlases ) texture ) ) ) )
( each-in-array atlases-to-draw i
( var source-rectangle SDL_Rect
( array 0 0
@ -1215,32 +1264,30 @@
( sdl-print-error )
( set exit-reason "SDL failed to render font atlas" ) ) ) )
;; (var slide-time-seconds float (/ (- (SDL_GetPerformanceCounter) slide-start-ticks)
;; (type-cast (SDL_GetPerformanceFrequency) float)))
;; (var text-x int (- 0 window-width))
;; (if (< slide-time-seconds 0.1f)
;; (set text-x (interpolate-range -400 200 0.f 0.1f slide-time-seconds))
;; (set text-x 200))
( var text-x int 0 )
( var slide-time-seconds float ( / ( - ( SDL_GetPerformanceCounter ) slide-start-ticks )
( type-cast ( SDL_GetPerformanceFrequency ) float ) ) )
( when should-render-ground
( var source-rectangle SDL_Rect
( array 0 0
ground-width
ground-height ) )
( var destination-rectangle SDL_Rect
( array 0 ( - window-height ground-height )
window-width
ground-height ) )
( unless ( = 0 ( SDL_RenderCopy renderer ground-texture
( addr source-rectangle ) ( addr destination-rectangle ) ) )
( sdl-print-error )
( set exit-reason "SDL failed to render ground" ) ) )
( when upscale-to-4k
( SDL_RenderSetScale renderer 2.f 2.f ) )
( defer ( SDL_RenderSetScale renderer 1.f 1.f ) )
( var source-rectangle SDL_Rect
( array 0 0
ground-width
ground-height ) )
( var destination-rectangle SDL_Rect
( array 0 ( - virtual-window-height ground-height )
virtual-window-width
ground-height ) )
( unless ( = 0 ( SDL_RenderCopy renderer ground-texture
( addr source-rectangle ) ( addr destination-rectangle ) ) )
( sdl-print-error )
( set exit-reason "SDL failed to render ground" ) ) )
( render-string
renderer ( addr ubuntu-regular-large-font-atlas ) ubuntu-regular-large-texture
( + text-x ( / window-width 4.5f ) ) ( / window-height 8 )
renderer ( addr ( field ( at heading-font-index font-atlases ) atlas ) )
( field ( at heading-font-index font-atlases ) texture )
( / true-window-width 4.5f ) ( / true-window-height 8 )
( path slide > heading ) )
( if ( path slide > is-code )
@ -1254,39 +1301,46 @@
( set power-update-str ( path current-power > on-update ) )
( break ) )
( render-string
renderer ( addr ubuntu-mono-font-atlas ) ubuntu-mono-texture
( + text-x ( / window-width 4 ) ) ( / window-height 4 )
renderer ( addr ( field ( at body-code-font-index font-atlases ) atlas ) )
( field ( at body-code-font-index font-atlases ) texture )
( / true-window-width 4 ) ( / true-window-height 4 )
power-update-str ) )
( render-string
renderer ( addr ubuntu-mono-font-atlas ) ubuntu-mono-texture
( + text-x ( / window-width 4 ) ) ( / window-height 4 )
renderer ( addr ( field ( at body-code-font-index font-atlases ) atlas ) )
( field ( at body-code-font-index font-atlases ) texture )
( / true-window-width 4 ) ( / true-window-height 4 )
( path slide > body ) ) ) )
( render-string
renderer ( addr ubuntu-regular-small-font-atlas ) ubuntu-regular-small-texture
( + text-x ( / window-width 4 ) ) ( / window-height 4 )
renderer ( addr ( field ( at body-font-index font-atlases ) atlas ) )
( field ( at body-font-index font-atlases ) texture )
( / true-window-width 4 ) ( / true-window-height 4 )
( path slide > body ) ) )
( when should-render-wizard
( unless ( field g-wizard-hero animation-start-ticks )
( set ( field g-wizard-hero animation-start-ticks ) ( SDL_GetPerformanceCounter ) ) )
( render-animation
renderer spritesheet-wizard ( addr ( field g-wizard-hero anim ) )
( field g-wizard-hero animation-start-ticks ) c-animation-frame-rate
( field g-wizard-hero x ) ( field g-wizard-hero y ) ) )
( set ( field g-boar-enemy x ) ( type-cast ( * window-width 0.70f ) int ) )
( set ( field g-boar-enemy y ) ( - window-height ( / ground-height 2 ) boar-ground-height ) )
( when should-render-boar
( unless ( field g-boar-enemy animation-start-ticks )
( set ( field g-boar-enemy animation-start-ticks ) ( SDL_GetPerformanceCounter ) ) )
( render-animation
renderer spritesheet-boar ( addr ( field g-boar-enemy anim ) )
( field g-boar-enemy animation-start-ticks ) c-animation-frame-rate
( field g-boar-enemy x )
( field g-boar-enemy y ) ) )
( update-effects renderer ( addr g-boar-enemy ) )
( scope
( when upscale-to-4k
( SDL_RenderSetScale renderer 2.f 2.f ) )
( defer ( SDL_RenderSetScale renderer 1.f 1.f ) )
( when should-render-wizard
( unless ( field g-wizard-hero animation-start-ticks )
( set ( field g-wizard-hero animation-start-ticks ) ( SDL_GetPerformanceCounter ) ) )
( render-animation
renderer spritesheet-wizard ( addr ( field g-wizard-hero anim ) )
( field g-wizard-hero animation-start-ticks ) c-animation-frame-rate
( field g-wizard-hero x ) ( field g-wizard-hero y ) ) )
( set ( field g-boar-enemy x ) ( type-cast ( * virtual-window-width 0.70f ) int ) )
( set ( field g-boar-enemy y ) ( - virtual-window-height ( / ground-height 2 ) boar-ground-height ) )
( when should-render-boar
( unless ( field g-boar-enemy animation-start-ticks )
( set ( field g-boar-enemy animation-start-ticks ) ( SDL_GetPerformanceCounter ) ) )
( render-animation
renderer spritesheet-boar ( addr ( field g-boar-enemy anim ) )
( field g-boar-enemy animation-start-ticks ) c-animation-frame-rate
( field g-boar-enemy x )
( field g-boar-enemy y ) ) )
( update-effects renderer ( addr g-boar-enemy ) ) )
( when s-enable-debug-overlay
( var buffer ( [] 256 char ) ( array 0 ) )
@ -1295,11 +1349,12 @@
( SDL_GetMouseState ( addr mouse-x ) ( addr mouse-y ) )
( snprintf buffer ( - ( array-size buffer ) 1 ) "Mouse: %4d %4d Percent of window: %.2f %.2f Wizard relative: %4d %4d"
mouse-x mouse-y
( / mouse-x ( type-cast window-width float ) ) ( / mouse-y ( type-cast window-height float ) )
( / mouse-x ( type-cast true- window-width float ) ) ( / mouse-y ( type-cast true- window-height float ) )
( - mouse-x ( field g-wizard-hero x ) ) ( - mouse-y ( field g-wizard-hero y ) ) )
( render-string
renderer ( addr ubuntu-mono-font-atlas ) ubuntu-mono-texture
10 ( - window-height 20 )
renderer ( addr ( field ( at body-code-font-index font-atlases ) atlas ) )
( field ( at body-code-font-index font-atlases ) texture )
10 ( - true-window-height 20 )
buffer ) )
;; #"#
;; result= FT_Set_Char_Size(typeface, 0, (16 * 64), 300, 300);