#INCLUDE #INCLUDE //#DEFINE MOUSE_NO_SMOOTHING 1 // Enable test game setups (comment out for release build) //#DEFINE TEST_GAMES 1 GOTO start ASM *=$3000 ENDASM #INCLUDE "utils.c65" #INCLUDE "cardconsts.c65" #INCLUDE "piles.c65" #INCLUDE "random.c65" #INCLUDE "carddeck.c65" #INCLUDE "cardrender.c65" //#INCLUDE "cardtests.c65" #INCLUDE "joystick.c65" #INCLUDE "mouse.c65" #INCLUDE "pointer.c65" //#INCLUDE "joysticktests.c65" #IFDEF TEST_GAMES #INCLUDE "testgames.c65" #IFEND #INCLUDE "gameloop.c65" FUNC main ASM sei ENDASM // Save zero page for potential kernal operations later save_zeropage() // Initialize game state #IFNDEF TEST_GAMES // Normal game: random shuffle and deal // Seed RNG with multiple entropy sources for better randomness WORD timer_seed BYTE raster @ $d012 BYTE extra_entropy BYTE warmup // Combine CIA timer with raster position timer_seed = PEEKW $DC04 extra_entropy = raster timer_seed = timer_seed ^ extra_entropy rand_seed(timer_seed) // Warm up RNG by advancing it based on timer low byte extra_entropy = PEEK $DC04 FOR warmup = 0 TO extra_entropy rand(extra_entropy) NEXT stock_init() stock_shuffle() deal_tableaus() #IFEND BYTE validation_result validate_deck(validation_result) IF validation_result POKE $d020 , color_red ENDIF set_vic_bank(0) // $0000 - $3fff set_vic_screenmem(1) // $400 set_vic_charmem(4) // $2000 set_vic_ecm() WORD charset_ptr WORD charset_end_ptr POINTER charset_ptr -> card_charset POINTER charset_end_ptr -> card_charset_end mem_copy(charset_ptr, charset_end_ptr, $2000) //mem_copy_range(charset_ptr, $2000, 512) fill_mem($d800, $d800+999, color_white) // Fill color mem POKE $d020 , color_white //color_grey POKE $d021 , color_black POKE $d022 , color_red POKE $d023 , color_light_grey POKE $d024 , color_dark_grey //show_charset() fill_mem($0400, $0400+999, 0) //render_card($0400, $30, 0) // Ace of Hearts //render_card($0400, $35, 27) // 2 of Spades //render_card($0400, $3a, 15) // 3 of Diamonds //render_all_cards_test() //render_facedown_test() //render_faceup_stack_test() //render_tableaus_test() //render_midgame_test() //render_card_back($0400, 35) // Test card back at column 35 //render_empty_pile($0400, 8*40+35) // Test empty pile below card back //render_foundation_test() //render_waste_test() //render_all_piles_test() // Move tests - runs multiple tests, press key between each //test_stock_to_waste_draw1() // Draw 1 card x3 from stock //wait_key() //fill_mem($0400, $0400+999, 0) //test_waste_to_tab_valid() // Move card from waste to tableau //wait_key() //fill_mem($0400, $0400+999, 0) //test_tab_to_found() // Tableau to foundation + auto-flip //wait_key() //fill_mem($0400, $0400+999, 0) //test_tab_to_tab_stack() // Move stack of 3 cards + auto-flip // Joystick tests //test_joystick_read() // Test joystick input reading - suit symbols //fill_mem($0400, $0400+999, 0) //test_pointer_sprite() // Test sprite pointer with joystick //fill_mem($0400, $0400+999, 0) //test_pointer_manual() // Test sprite pointer manual movement // Mouse test //test_pointer_mouse() // Test sprite pointer with 1351 mouse // Start the game! game_init() game_loop() // Never returns FEND LABEL start main() LABEL card_charset ASM !binary "charpad_cards/charpad_cards7.bin" ENDASM LABEL card_charset_end