From abbd59fd9eae02f58285e2ecf3462256528f98bc Mon Sep 17 00:00:00 2001 From: Christophe Meneboeuf Date: Fri, 23 Oct 2020 22:21:08 +0200 Subject: [PATCH] Bugfix: bresenham when uniting rooms --- escape.dsk | Bin 143360 -> 143360 bytes src/builder/builder.asm | 4 +-- src/builder/unite.asm | 69 ++++++++++++++++++++++++++++------------ src/main.asm | 8 ++--- src/world.asm | 2 +- 5 files changed, 55 insertions(+), 28 deletions(-) diff --git a/escape.dsk b/escape.dsk index e74d4edb2e5d7164acb57ad7d4884d4b4bcae237..1d2b78d977d6890d35120fa34fc709f10cfaf833 100644 GIT binary patch delta 1093 zcmZ`&e`p(39DkSYk~B%%TiRZdTLV`X(&l7P-GspWW9=XNW1Os@+5S*5hy(M7gTSQF zfr(8oS^s#py9ch-W~SF&$H9Ks++g&N$O(%ynS}d8?i?Z(YQbTmK?NB}THkfE>K}W5 zywB&u=lec9KD?LSa;CSOUz~FHU3>|gj||WNY^QO~-IFO!rIP>vw`c$nG>u-`e^ zc@G=xVUPE)tLiJ`(O%+#`oUQ^OvF%EGVF~p{EMDD?+Ujr2yw+N)z}z1nG9p|on$x| zV=;{c-lw9>G)y*7V@nX>0aArI1hM z$5={-Ws@cQu=%-VKJj99kBzBf>LP)R8BYAjKt_fWXAJHy_PxO7=7u)~+kuV#6zl}F zu>QUBq4cM9@_i;QjVOiuq&=^TnPY=drU2G!70`4p>5ffpRR2BBM$ts(G%FzFuHEI@H$+(x_d?cL$3J~;%vn6YzmFd&XNs= z4KZkAHi(QYmtr6IZv%~LK}xGsn*Eh;nuC>xO<$$j3{>WtNBA*+&6VSy_nI2G!1Xjut@V0wBmneB>rm@P5`-8ZZEv;m+J{asLPE65E_1Y@4~jQU2ZKz znj`D=@=&w8a;SNn>f%>udFW~#y_E}2cn&0ghL&vd5Ucgat(a5)#_aCLwEq|L?ZG*; zk_%F|4$ zlpWX|Xn20G&p{H$%HZhNAe05nX;7Ru2$i_mOQN5y4T+!Nx4+1tUK_?G4pEE!sBe)% zM;BFOEOX+Lu}ato=`;LM@|?JghpuyC9>W4BUN^3JJ+|Le?F}!1Oes=aF)`kVpwU&2 c>REk=#ag5&ZxbqYv+2xq?%wa*CA!jo1GoR?H2?qr delta 1046 zcmZ{jZ)h839LMiTcS-suY3%e#ayIg8O154U{0o7}TyYc}=^9Wr&^JNdi@*>v@Woaz zUE3$s!DHKd#@5!|%r3j?4gYlBnC!(tWE9%GxEw0UU<^7!WMiq6A&5Uxi$B!&`HqxKhA^g3iO7`y$lLoM(RNInX(oLXOOOdSlU zwIskbbv4Q1)quKrtb!|x^(naaq)iUANK~yZjFwIl(TuINr=LOVzu9x~|o~45` zI$fFZP|x`g6=zFyWtQogP!2eN@&)?=E|jRx!IowjmP^tFcB?OzBw5TkrX9L?sSGH% b)TfI%TjZEfD}Z{`Q0}hUKDsc!07m`>jEKyD diff --git a/src/builder/builder.asm b/src/builder/builder.asm index fb13f9e..183f530 100644 --- a/src/builder/builder.asm +++ b/src/builder/builder.asm @@ -82,8 +82,8 @@ choice_size_maze: tst_tiny: cmp #$C1 bne tst_small - ldx #16 - ldy #16 + ldx #20 + ldy #20 rts tst_small: cmp #$C2 diff --git a/src/builder/unite.asm b/src/builder/unite.asm index 5c85be7..2eff48a 100644 --- a/src/builder/unite.asm +++ b/src/builder/unite.asm @@ -365,8 +365,8 @@ Unite_Rooms: .define DELTA_Y ZERO_5_3 .define DELTA_X_2 ZERO_5_5 .define DELTA_Y_2 ZERO_5_6 -.define ROOM_Y ZERO_7_1 -.define ROOM_X ZERO_7_2 +.define ROOM_Y ZERO_8_1 +.define ROOM_X ZERO_8_2 .define D ZERO_3 .define ROOM_FOUND SAVE_X _Connect_Room: @@ -374,7 +374,7 @@ _Connect_Room: ; d = 0 lda #0 sta D - + ; delta_y = zone1_y - room->y ldx ROOM_FOUND lda Rooms, X @@ -403,6 +403,7 @@ _Connect_Room: sta DELTA_X end_abs_x: ; int dx2 = 2 * dx + lda DELTA_X asl sta DELTA_X_2 @@ -416,6 +417,7 @@ _Connect_Room: sta DELTA_Y end_abs_y: ; int dy2 = 2 * dy + lda DELTA_Y asl sta DELTA_Y_2 @@ -470,6 +472,18 @@ _Connect_Room: bcc d_infequal_dx beq d_infequal_dx ; if (d > dx) + ; if (*ptr_room != zone_nr && *ptr_room <= WALKABLE) break; + lda (PTR_ROOM), Y ; Y = 0 + cmp ZONE_NR + beq continue_1a + cmp #ACTORS::WALKABLE + beq end + bpl continue_1a + jmp end + continue_1a: + ; *ptr_room = zone_nr + lda ZONE_NR + sta (PTR_ROOM), Y ; Y = 0 ; ptr_room += iy patch_iy1: ADD16 PTR_ROOM, #WIDTH_WORLD @@ -482,15 +496,25 @@ _Connect_Room: ; if (*ptr_room != zone_nr && *ptr_room <= WALKABLE) break; lda (PTR_ROOM), Y ; Y = 0 cmp ZONE_NR - beq continue_1 + beq continue_1b cmp #ACTORS::WALKABLE beq end - bpl continue_1 + bpl continue_1b jmp end - continue_1: + continue_1b: lda ZONE_NR sta (PTR_ROOM), Y ; Y = 0 jmp while_1 + + ; end label in the middle to be reachable by the branches + end: + + ; flood fills works on ptr_tile + ldx #(ZONE_0 + 1) + lda ZONE_NR + jsr _Flood_Fill + rts + dy_sup: while_2: ; ptr_room += iy @@ -504,8 +528,20 @@ _Connect_Room: cmp DELTA_Y bcc d_infequal_dy beq d_infequal_dy - ;if (d > dy) { - ;ptr_room += ix; + ; if (d > dy) { + ; if (*ptr_room != zone_nr && *ptr_room <= WALKABLE) break; + lda (PTR_ROOM), Y ; Y = 0 + cmp ZONE_NR + beq continue_2a + cmp #ACTORS::WALKABLE + beq end + bpl continue_2a + jmp end + continue_2a: + ; *ptr_room = zone_nr + lda ZONE_NR + sta (PTR_ROOM), Y ; Y = 0 + ; ptr_room += ix; patch_ix2: ADD16 PTR_ROOM, #1 ; d -= dy2 @@ -517,21 +553,12 @@ _Connect_Room: ; (*ptr_room != zone_nr && *ptr_room <= WALKABLE) lda (PTR_ROOM), Y ; Y = 0 cmp ZONE_NR - beq continue_2 + beq continue_2b cmp #ACTORS::WALKABLE beq end - bpl continue_2 + bpl continue_2b jmp end - continue_2: + continue_2b: lda ZONE_NR sta (PTR_ROOM), Y ; Y = 0 - jmp while_2 - end: - - ; flood fills works on ptr_tile - ldx #(ZONE_0 + 1) - lda ZONE_NR - jsr _Flood_Fill - - - rts \ No newline at end of file + jmp while_2 \ No newline at end of file diff --git a/src/main.asm b/src/main.asm index 67abbc6..3abeef0 100644 --- a/src/main.asm +++ b/src/main.asm @@ -67,13 +67,13 @@ _main: jsr Title ; will init the seed ; overwrite the seed to debug - ; lda #$E6 + ; lda #$55 ; sta SEED0 - ; lda #$CE + ; lda #$67 ; sta SEED1 - ; lda #$AD + ; lda #$8C ; sta SEED2 - ; lda #$03 + ; lda #$5F ; sta SEED3 jsr Random8_Init diff --git a/src/world.asm b/src/world.asm index eb22164..7af4cfa 100644 --- a/src/world.asm +++ b/src/world.asm @@ -114,7 +114,7 @@ world_set_player: rts -; Destroys ZERO_2_1, ZERO_2_2 and ZERO_2_3 +; Destroys ZERO_2_1, ZERO_2_2, ZERO_2_3 ZERO_7_1 and ZERO_7_2 Compute_Maze_Addr: stx COORD_X