|
|
|
@ -1,15 +1,34 @@ |
|
|
|
|
( |
|
|
|
|
; simple GOL with screen and a buffer |
|
|
|
|
; simple GOL with screen and a buffer + DRAWING!!! |
|
|
|
|
|
|
|
|
|
; Middle-click to payse or resume |
|
|
|
|
; (hold the button until paused - there is a sleep between generations and checking buttons) |
|
|
|
|
; |
|
|
|
|
; When paused, draw with left (white) and right (black) mouse buttons |
|
|
|
|
; |
|
|
|
|
; Resume by clicking middle again. |
|
|
|
|
|
|
|
|
|
(def GENERATION_MS 200) |
|
|
|
|
|
|
|
|
|
; Real pixel size |
|
|
|
|
(sc-init 400 400) |
|
|
|
|
; Upscaling factor (bug pixels) |
|
|
|
|
(sc-opt SCREEN_UPSCALE 10) |
|
|
|
|
(sc-opt SCREEN_AUTO_BLIT 0) |
|
|
|
|
|
|
|
|
|
; Number of big pixels |
|
|
|
|
(def W 40) |
|
|
|
|
(def H 40) |
|
|
|
|
|
|
|
|
|
; !!! If you change size, also update the following constants. |
|
|
|
|
; Compile-time math is not implemented yet. |
|
|
|
|
|
|
|
|
|
(def XMAX 39) ; W-1 |
|
|
|
|
(def YMAX 39) ; H-1 |
|
|
|
|
(def NCELLS 1600) ; W*H |
|
|
|
|
|
|
|
|
|
; --- end of config --- |
|
|
|
|
(sc-opt SCREEN_AUTO_BLIT 0) |
|
|
|
|
|
|
|
|
|
(sc-erase 0) ; all black |
|
|
|
|
(sym ng g15) |
|
|
|
|
(mkbf ng NCELLS) |
|
|
|
@ -28,12 +47,60 @@ |
|
|
|
|
(bfwr @ng 96 1) |
|
|
|
|
(bfwr @ng 97 1) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(def LBTN 0) |
|
|
|
|
(def RBTN 1) |
|
|
|
|
(def MBTN 2) |
|
|
|
|
|
|
|
|
|
(:loop) |
|
|
|
|
(sc-poll) |
|
|
|
|
; TODO interactivity? |
|
|
|
|
|
|
|
|
|
; Drawing |
|
|
|
|
(sc-mbtn _ MBTN |
|
|
|
|
(nz? |
|
|
|
|
(:release) |
|
|
|
|
(sc-poll) |
|
|
|
|
(mslp 10) |
|
|
|
|
(sc-mbtn _ MBTN (nz? (j :release))) |
|
|
|
|
|
|
|
|
|
(:mousing) |
|
|
|
|
(sc-poll) |
|
|
|
|
(mslp 10) |
|
|
|
|
|
|
|
|
|
(ld r3 -1) |
|
|
|
|
|
|
|
|
|
(sc-mbtn _ LBTN) |
|
|
|
|
(ld.nz r3 1) |
|
|
|
|
(sc-mbtn _ RBTN) |
|
|
|
|
(ld.nz r3 0) |
|
|
|
|
|
|
|
|
|
(tst r3 (nneg? |
|
|
|
|
(sc-mouse r0 r1) |
|
|
|
|
|
|
|
|
|
(tst r3) |
|
|
|
|
(sc-wr.nz r0 r1 #ffffff) |
|
|
|
|
(sc-wr.z r0 r1 #000000) |
|
|
|
|
|
|
|
|
|
(sc-blit) |
|
|
|
|
(mul r1 W) |
|
|
|
|
(add r0 r1) |
|
|
|
|
(ld8 r3:8 r3) |
|
|
|
|
(bfwr @ng r0 r3) |
|
|
|
|
)) |
|
|
|
|
|
|
|
|
|
(sc-mbtn _ MBTN |
|
|
|
|
(z? (j :mousing))) |
|
|
|
|
|
|
|
|
|
(:release2) |
|
|
|
|
(sc-poll) |
|
|
|
|
(mslp 10) |
|
|
|
|
(sc-mbtn _ MBTN (nz? (j :release2))) |
|
|
|
|
) |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
(call Display) |
|
|
|
|
(sc-blit) |
|
|
|
|
(mslp 200) |
|
|
|
|
(mslp GENERATION_MS) |
|
|
|
|
(j :loop) |
|
|
|
|
|
|
|
|
|
(proc CountNeighbors x y |
|
|
|
|