From cad3a0cf38365ec946a11da23845036655e807d0 Mon Sep 17 00:00:00 2001 From: pkali Date: Sat, 3 Sep 2022 23:33:12 -0400 Subject: [PATCH] WIP: conditional compilation, the beginnings --- artwork/sfx/scorch_SFX-feat.txt | 40 +++++++ artwork/sfx/scorch_SFX-only-str.rmt | Bin 0 -> 1816 bytes artwork/sfx/scorch_SFX-only.rmt | Bin 0 -> 2228 bytes constants.asm | 27 +++-- display.asm | 168 --------------------------- display_static.asm | 174 ++++++++++++++++++++++++++++ scorch.asm | 46 +++++--- scorch.xex | Bin 50274 -> 50268 bytes textproc.asm | 10 +- weapons.asm | 6 +- 10 files changed, 270 insertions(+), 201 deletions(-) create mode 100644 artwork/sfx/scorch_SFX-feat.txt create mode 100644 artwork/sfx/scorch_SFX-only-str.rmt create mode 100644 artwork/sfx/scorch_SFX-only.rmt create mode 100644 display_static.asm diff --git a/artwork/sfx/scorch_SFX-feat.txt b/artwork/sfx/scorch_SFX-feat.txt new file mode 100644 index 0000000..e7bb349 --- /dev/null +++ b/artwork/sfx/scorch_SFX-feat.txt @@ -0,0 +1,40 @@ +;* --------BEGIN-------- +;* C:\Atari\rmt\rmt128\scorch_SFX-only-str.rmt +FEAT_SFX equ 1 +FEAT_GLOBALVOLUMEFADE equ 0 ;RMTGLOBALVOLUMEFADE variable +FEAT_NOSTARTINGSONGLINE equ 0 +FEAT_INSTRSPEED equ 1 +FEAT_CONSTANTSPEED equ 16 ;(0 times) +FEAT_COMMAND1 equ 1 ;(8 times) +FEAT_COMMAND2 equ 0 ;(0 times) +FEAT_COMMAND3 equ 0 ;(0 times) +FEAT_COMMAND4 equ 0 ;(0 times) +FEAT_COMMAND5 equ 0 ;(0 times) +FEAT_COMMAND6 equ 0 ;(0 times) +FEAT_COMMAND7SETNOTE equ 0 ;(0 times) +FEAT_COMMAND7VOLUMEONLY equ 0 ;(0 times) +FEAT_PORTAMENTO equ 0 ;(0 times) +FEAT_FILTER equ 1 ;(22 times) +FEAT_FILTERG0L equ 0 ;(0 times) +FEAT_FILTERG1L equ 0 ;(0 times) +FEAT_FILTERG0R equ 0 ;(0 times) +FEAT_FILTERG1R equ 0 ;(0 times) +FEAT_BASS16 equ 0 ;(0 times) +FEAT_BASS16G1L equ 0 ;(0 times) +FEAT_BASS16G3L equ 0 ;(0 times) +FEAT_BASS16G1R equ 0 ;(0 times) +FEAT_BASS16G3R equ 0 ;(0 times) +FEAT_VOLUMEONLYG0L equ 0 ;(0 times) +FEAT_VOLUMEONLYG2L equ 0 ;(0 times) +FEAT_VOLUMEONLYG3L equ 0 ;(0 times) +FEAT_VOLUMEONLYG0R equ 0 ;(0 times) +FEAT_VOLUMEONLYG2R equ 0 ;(0 times) +FEAT_VOLUMEONLYG3R equ 0 ;(0 times) +FEAT_TABLETYPE equ 0 ;(0 times) +FEAT_TABLEMODE equ 0 ;(0 times) +FEAT_TABLEGO equ 1 ;(2 times) +FEAT_AUDCTLMANUALSET equ 1 ;(6 times) +FEAT_VOLUMEMIN equ 0 ;(0 times) +FEAT_EFFECTVIBRATO equ 1 ;(1 times) +FEAT_EFFECTFSHIFT equ 1 ;(11 times) +;* --------END-------- diff --git a/artwork/sfx/scorch_SFX-only-str.rmt b/artwork/sfx/scorch_SFX-only-str.rmt new file mode 100644 index 0000000000000000000000000000000000000000..cc689e587aa27017f6d90d75b92d26b450798f71 GIT binary patch literal 1816 zcmbW1y>1gh5Xb*_KHHbo+7>O#T zAT6TG10V#|If?Cp1__B5;2o$aC=dlgF|)V1jYE)DyvnK=)Kh`qs`<<-Te zYZz|48b`4h+>M{aui|&{xA=E_t^2(Dru)A8wOiV}x%qVS*XE0@-qzo(huhD#zij7v z#olu7ZSOtr3^Sssg%mFHY~nTjd&M`Qizt8cCB&Z zlZAB)?SzBQbqJ2419_?c63x%2j$qm3P8N!#a-~{t%r7inx_o)>8Tvg$#Uh&Oxw{$Z z-&hze9ojAe7rx7<#ql%_sZ2OAel^4Dw0rMfCh^Heduh~LphJm3hZ2IAU<4vndV||j z*hnhH#Zqv|xL%xxN{B=6wNh~91=a=H0;=--HeS=Twq{C!SGhcUzH*^jt2Y{Rp~wgO z@kRdFcp`rk9CtK_xw*#0daYVHKU?-WLp6JP_XUoPCvX&;1JRW$vIcU^^IWRf91Lj^ zDln@`P`=cK2@21SDG`(7CxvT^TtHbSOo=F~(T7@4#x;6$-)!#sG0cpW&E@Se*(M>z z?0hb3WlZk7naLQ3%rR#?imsU!IB%AT#*@i4a2p71)>l^4`2PWY>|nivb_cBvq9X`9 z2=?Q5z<3ET*<&+#gn=^3Ee8kj9e56+gfQ9RfDaXXvhSk{3TwXmfU7{%XvkD89@s+5 zL}(%~;Y;jfhiC4QT)2K+UXZI0*~N mgK9yyQl-JY9))|I4x!BK4F6@0>hkRK>#Ns>7!G$J2LAxY56*-D literal 0 HcmV?d00001 diff --git a/artwork/sfx/scorch_SFX-only.rmt b/artwork/sfx/scorch_SFX-only.rmt new file mode 100644 index 0000000000000000000000000000000000000000..9fa9461c31d2ddaae6567249fb5063279c87401d GIT binary patch literal 2228 zcmbVMKX2Pc6n~^?NhZ!J6}ySzsK|j39Mx82M>L8cLqpq?oDNCaB1*=TvPg*#MJg0o z#pq;psMn&CKR{8Wd#5f13iJ!~J9O%hp~z4aQQq-PTCVLSho6q`9^bw9dw;0u6!gO0 zmk*z8>53pI`V+mS%X?3CSN~T3QU6naqu<{Sw!h#0Y5R|Dy7Opfxbx4>%iUjg|JyZ< z7sl^Krcr7sz1Py?dHQ znhznR66ieL6GrJf6lO~YV+Aw?R0XxA#Uu{lOpq96jlknI<=L~j*e4pD(x}=%E<_8+ zg)o31v>6b>OD|x1ipO!Kuvi>eGOQQ!;Dj*rX)9%{ybMP&jAh`J$J}sTBZr3~6L6Kw ztG6m2udP>WwGBhgYGZceyhj*;;!(we0L@Odhx1VLP{>0oh7s?O z2UK#P=FCT@6%SSAE35(`wHl);;lLJc5eyMD5mbg;yhA}eMSNj*mtA11*vfJ1*Zh3p zuEr%ve7!D+c{Dpi##qtSl?Sm_*O?Cq-U2_Slh`3XQ_9=}d( zA0gMTGq2cS5Yu+@7AmA(7uZW&R4uPov^-#~Qs6NKuP_=CQmL>D85~?<%R>6?qjPkN zGm#GR)en2U#Q)XeN-2)9RvYI5flcK7n%#NmG-xWMt>iSY*R#N0Cqu}X-N3)h*)!Aq z_T8uVr!bwq1$pnv-m3?Xe9s(MbmV(o7+E15`eQ4YkzA+S3q1$lb|TO7!HfD944l!( zaV_XrX4s=`tLu2N$U*hV+b}c(bH5jb7K{dd-=h1jA9Wyb{E$QSvQGi@W79ArI3_h^Di1w|6 zeb?FVBNg8dv1Y?z)Q`Y*UPMlZvRKeI!_W#2V2o*5)OO7-xIQin)HZ{_av?OmJ{|a9 RTkx4T3WEqehqQhN-T|+8P^|y} literal 0 HcmV?d00001 diff --git a/constants.asm b/constants.asm index 2f55d79..5cdd5a4 100644 --- a/constants.asm +++ b/constants.asm @@ -559,8 +559,6 @@ CreditsStart dta d"Warsaw, Miam",d"i"* dta d"2000-202",d"2"* dta d" "* - dta d"B",d"y"* - dta d" "* dta d"Programmin",d"g"* dta d"Tomasz 'Pecus' Peck",d"o"* dta d"Pawel 'pirx' Kalinowsk",d"i"* @@ -568,15 +566,19 @@ CreditsStart dta d"SFX, Music and Suppor",d"t"* dta d"Michal 'Miker' Szpilowsk",d"i"* dta d" "* - dta d"Additional Musi",d"c"* - dta d"Mario 'Emkay' Kri",d"x"* - dta d" "* + .IF target != 5200 + dta d"Additional Musi",d"c"* + dta d"Mario 'Emkay' Kri",d"x"* + dta d" "* + .ENDIF dta d"Code Optimizatio",d"n"* dta d"Piotr '0xF' Fusi",d"k"* dta d" "* dta d"Ar",d"t"* dta d"Adam Wachowsk",d"i"* - dta d"Krzysztof 'Kaz' Ziembi",d"k"* + .IF target != 5200 + dta d"Krzysztof 'Kaz' Ziembi",d"k"* + .ENDIF dta d" "* dta d"Ideas and Q",d"A"* dta d"Bocianu, Probabilitydragon, EnderDude",d","* @@ -586,9 +588,16 @@ CreditsStart dta d" "* dta d"Additional testin",d"g"* dta d"Arek and Alex Peck",d"o"* - dta d" "* - dta d"Stay tuned for the FujiNet version",d"!"* + .IF target != 5200 + dta d" "* + dta d"Stay tuned for the FujiNet version",d"!"* + .ENDIF dta d" "* CreditsEnd -CreditsLines=44 +.IF target = 5200 + CreditsLines=36 +.ELSE + CreditsLines=42 ; 34 in reality. add 7? +.ENDIF + .endif diff --git a/display.asm b/display.asm index 7c4a95e..4da3c22 100644 --- a/display.asm +++ b/display.asm @@ -103,173 +103,5 @@ DLCreditsAddr ;------------------------ ; end of "variables" (RAM) ;------------------------ -; start of "constants" (ROM) -;----------------------------------------------- -;Screen displays go first to avoid crossing 4kb barrier -;----------------------------------------------- -OptionsScreen - dta d"Welcome to Scorch v. " - build ; 4 bytes from scorch.asm (fancy method) :) - dta d" (un)2000-2022" - dta d" Please select option with cursor keys " - dta d" and press (Return) to proceed " -MoreUp - dta d" " - dta 92,92,92 - dta d" more " - dta 92,92,92 - dta d" " -MoreDown - dta d" " - dta 93,93,93 - dta d" more " - dta 93,93,93 - dta d" " -WeaponsDescription - ; 0123456789012345678901234567890123456789 - dta d"Tab"* - dta d ": Defensive/Offensive weapon " -PurchaseDescription - ; 0123456789012345678901234567890123456789 - dta d"Space"* - dta d": Purchase " - dta d"Return"* - dta d": Finish " -ActivateDescription - ; 0123456789012345678901234567890123456789 - dta d"Space"* - dta d": Activate " - dta d"Return"* - dta d": Finish " -EmptyLine - dta d" " -;--------------------------------------------------- -OptionsTitle - dta d" scorch "* -DifficultyTitle - dta d" difficulty "* -PurchaseTitle - dta d"purchase weapons" -InventoryTitle - dta d"activate weapons"* -GameOverTitle - dta d" game over "* -GameOverTitle2 - dta d" Player Points Hits Earned Money " -;----------------------------------------------------- -;-------------display-lists--------------------------- -;----------------------------------------------------- -dl ; MAIN game display list - .byte 0 - .byte $42 - .word textbuffer - .byte $02, $02 +$80 ;DLI - .byte $10 ; 2 blank lines - - .byte $4f - .word display ; 1 line - :76 .by $0f ;76 - .by $0f+$80 ; DLI (black bar) ;2 - .by $0f+$80 ; DLI - :13 .by $0f ;13 - .by $0f+$80 ; DLI (black bar) ;2 - .by $0f+$80 ; DLI - :8 .by $0f ;8 - .by $4f ;1 - .wo display+$0ff0 - :2 .by $0f ;2 - .by $0f+$80 ; DLI (black bar) ;2 - .by $0f+$80 ; DLI - :9 .by $0f ;9 - .by $0f+$80 ; DLI (black bar) ;2 - .by $0f+$80 ; DLI - :8 .by $0f ;8 - .by $0f+$80 ; DLI (black bar) ;2 - .by $0f+$80 ; DLI - :7 .by $0f ;7 - .by $0f+$80 ; DLI (black bar) ;2 - .by $0f+$80 ; DLI - :6 .by $0f ;6 - .by $0f+$80 ; DLI (black bar) ;2 - .by $0f+$80 ; DLI - :5 .by $0f ;5 - .by $0f+$80 ; DLI (black bar) ;2 - .by $0f+$80 ; DLI - :4 .by $0f ;4 - .by $0f+$80 ; DLI (black bar) ;2 - .by $0f+$80 ; DLI - :3 .by $0f ;3 - .by $0f+$80 ; DLI (black to end);1 - :38 .byte $0f ;35 ..... = 200 - .by $4f - .wo EmptyLine ; additional line of ground - .byte $41 - .word dl -;----------------------------------------------- - .ALIGN $1000 ; WARNING!!!! 4KiB barrier crossing here, might need reassignment!!! -OptionsDL - .byte $70 - .byte $47 - .word OptionsTitle - .byte $70,$70 - .byte $42 - .word OptionsScreen - .byte $30,$02,$02,$70 - .byte $42 - .word OptionsHere - .byte $10 - :maxOptions-1 .by $02,$10 - :(9-maxOptions) .by $70,$10 - .byte $80 - .byte $4f - .word (display+140*40) - :21 .by $0f ;76 - .byte $41 - .word OptionsDL -;------------------------ -;Enter names of tanks DL -NameDL - .byte $70 - .byte $47 - .word DifficultyTitle - .byte $70,$70 - .byte $42 - .word NameScreen - .byte $30 - .byte $02,$30+$80,$02 - .byte $10,$02,$02,$02,$30,$02,$02 - .byte $41 - .word NameDL -; ------------------------------------------------- -GameOverResults = display+$0ff0 ; reuse after game -Credits = GameOverResults +(6*40) -CreditsLastLine = Credits + (CreditsLines*40) -GameOverDL - .byte $70,$40 - .byte $47 ; 16 gr8 lines - .word GameOverTitle - .byte $4f ; 1 line - .word display+(40*72) - :28 .byte $0f ; 28 lines - .byte $0f+$80 - .byte $4f ; 1 line - .word display+(40*32) - :30 .byte $0f ; 30 lines - .byte $0f+$80 ; 1 line - .byte $4f ; 1 line - .word display+(40*72) - :7 .byte $0f ; 7 lines - .byte $00+$80 ; 1 line - .byte $42 ; 7 tekst lines - .word GameOverTitle2 - .byte $00+$80 - .byte $42 - .word GameOverResults - :5 .byte $00+$80,$02 - .byte $01 - .word DLCreditsFragm -; --------------- -; end of "constants" (ROM) -;----------------------------------------------- .endif \ No newline at end of file diff --git a/display_static.asm b/display_static.asm new file mode 100644 index 0000000..b8f8d10 --- /dev/null +++ b/display_static.asm @@ -0,0 +1,174 @@ +; @com.wudsn.ide.asm.mainsourcefile=scorch.asm + +.IF *>0 ;this is a trick that prevents compiling this file alone +;------------------------ +; start of "constants" (ROM) +;----------------------------------------------- +;Screen displays go first to avoid crossing 4kb barrier +;----------------------------------------------- +OptionsScreen + dta d"Welcome to Scorch v. " + build ; 4 bytes from scorch.asm (fancy method) :) + dta d" (un)2000-2022" + dta d" Please select option with cursor keys " + dta d" and press (Return) to proceed " +MoreUp + dta d" " + dta 92,92,92 + dta d" more " + dta 92,92,92 + dta d" " +MoreDown + dta d" " + dta 93,93,93 + dta d" more " + dta 93,93,93 + dta d" " +WeaponsDescription + ; 0123456789012345678901234567890123456789 + dta d"Tab"* + dta d ": Defensive/Offensive weapon " +PurchaseDescription + ; 0123456789012345678901234567890123456789 + dta d"Space"* + dta d": Purchase " + dta d"Return"* + dta d": Finish " +ActivateDescription + ; 0123456789012345678901234567890123456789 + dta d"Space"* + dta d": Activate " + dta d"Return"* + dta d": Finish " +EmptyLine + dta d" " +;--------------------------------------------------- +OptionsTitle + dta d" scorch "* +DifficultyTitle + dta d" difficulty "* +PurchaseTitle + dta d"purchase weapons" +InventoryTitle + dta d"activate weapons"* +GameOverTitle + dta d" game over "* +GameOverTitle2 + dta d" Player Points Hits Earned Money " +;----------------------------------------------------- +;-------------display-lists--------------------------- +;----------------------------------------------------- + +dl ; MAIN game display list + .byte 0 + .byte $42 + .word textbuffer + .byte $02, $02 +$80 ;DLI + .byte $10 ; 2 blank lines + + .byte $4f + .word display ; 1 line + :76 .by $0f ;76 + .by $0f+$80 ; DLI (black bar) ;2 + .by $0f+$80 ; DLI + :13 .by $0f ;13 + .by $0f+$80 ; DLI (black bar) ;2 + .by $0f+$80 ; DLI + :8 .by $0f ;8 + .by $4f ;1 + .wo display+$0ff0 + :2 .by $0f ;2 + .by $0f+$80 ; DLI (black bar) ;2 + .by $0f+$80 ; DLI + :9 .by $0f ;9 + .by $0f+$80 ; DLI (black bar) ;2 + .by $0f+$80 ; DLI + :8 .by $0f ;8 + .by $0f+$80 ; DLI (black bar) ;2 + .by $0f+$80 ; DLI + :7 .by $0f ;7 + .by $0f+$80 ; DLI (black bar) ;2 + .by $0f+$80 ; DLI + :6 .by $0f ;6 + .by $0f+$80 ; DLI (black bar) ;2 + .by $0f+$80 ; DLI + :5 .by $0f ;5 + .by $0f+$80 ; DLI (black bar) ;2 + .by $0f+$80 ; DLI + :4 .by $0f ;4 + .by $0f+$80 ; DLI (black bar) ;2 + .by $0f+$80 ; DLI + :3 .by $0f ;3 + .by $0f+$80 ; DLI (black to end);1 + :38 .byte $0f ;35 ..... = 200 + .by $4f + .wo EmptyLine ; additional line of ground + .byte $41 + .word dl +;----------------------------------------------- + .ALIGN $1000 ; WARNING!!!! 4KiB barrier crossing here, might need reassignment!!! +OptionsDL + .byte $70 + .byte $47 + .word OptionsTitle + .byte $70,$70 + .byte $42 + .word OptionsScreen + .byte $30,$02,$02,$70 + .byte $42 + .word OptionsHere + .byte $10 + :maxOptions-1 .by $02,$10 + :(9-maxOptions) .by $70,$10 + .byte $80 + .byte $4f + .word (display+140*40) + :21 .by $0f ;76 + .byte $41 + .word OptionsDL +;------------------------ +;Enter names of tanks DL +NameDL + .byte $70 + .byte $47 + .word DifficultyTitle + .byte $70,$70 + .byte $42 + .word NameScreen + .byte $30 + .byte $02,$30+$80,$02 + .byte $10,$02,$02,$02,$30,$02,$02 + .byte $41 + .word NameDL +; ------------------------------------------------- +GameOverResults = display+$0ff0 ; reuse after game +Credits = GameOverResults +(6*40) +CreditsLastLine = Credits + (CreditsLines*40) +GameOverDL + .byte $70,$40 + .byte $47 ; 16 gr8 lines + .word GameOverTitle + .byte $4f ; 1 line + .word display+(40*72) + :28 .byte $0f ; 28 lines + .byte $0f+$80 + .byte $4f ; 1 line + .word display+(40*32) + :30 .byte $0f ; 30 lines + .byte $0f+$80 ; 1 line + .byte $4f ; 1 line + .word display+(40*72) + :7 .byte $0f ; 7 lines + .byte $00+$80 ; 1 line + .byte $42 ; 7 tekst lines + .word GameOverTitle2 + .byte $00+$80 + .byte $42 + .word GameOverResults + :5 .byte $00+$80,$02 + .byte $01 + .word DLCreditsFragm +; --------------- +; end of "constants" (ROM) +;----------------------------------------------- +.endif \ No newline at end of file diff --git a/scorch.asm b/scorch.asm index 451d42c..ff1c750 100644 --- a/scorch.asm +++ b/scorch.asm @@ -35,10 +35,19 @@ ;and due to being always short of time/energy (to finish the game) ;we decided it must go in 'English' to let other people work on it +.def target = 800 ;5200 ; or 800 + .macro build dta d"1.13" ; number of this build (3 bytes) .endm +.macro RMTSong + .IF target != 5200 + lda #:1 + jsr RMTSongSelect + .ENDIF +.endm + icl 'definitions.asm' @@ -153,9 +162,10 @@ icl 'lib/ATARISYS.ASM' icl 'lib/macro.hea' - ;splash screen and musix - icl 'artwork/Scorch50.asm' - + .IF target !=5200 + ;splash screen and musix + icl 'artwork/Scorch50.asm' + .ENDIF ;Game loading address ORG $3000 @@ -165,6 +175,7 @@ WeaponFont ;Screen displays go here to avoid crossing 4kb barrier ;----------------------------------------------- icl 'display.asm' + icl 'display_static.asm' ;---------------------------------------------- ;-------------------------------------------------- @@ -221,9 +232,7 @@ START ;jsr GameOverScreen ; only for test !!! - lda #song_main_menu - jsr RmtSongSelect - + RMTSong song_main_menu jsr Options ;startup screen jsr MakeDarkScreen @@ -281,8 +290,7 @@ SettingBarrel ; Results are number of other deaths ; before the player dies itself - lda #song_round_over - jsr RmtSongSelect + RmtSong song_round_over jsr DisplayResults jsr DemoModeOrKey @@ -385,7 +393,7 @@ GoGameOver NoGameOverYet inc CurrentRoundNr jsr MakeDarkScreen ; issue #72 - jsr RmtSongSelect + ; jsr RmtSongSelect ; ????? mva #sfx_silencer sfx_effect jsr PMoutofscreen @@ -402,8 +410,7 @@ NoGameOverYet ; the shooting angle is randomized ; of course gains an loses are zeroed - lda #song_ingame - jsr RmtSongSelect + RmtSong song_ingame jsr SetPMWidth lda #0 @@ -1641,7 +1648,7 @@ MakeDarkScreen ;-------------------------------------------------- ; starting song line 0-255 to A reg cmp #song_ingame - bne noingame ; noMusic blck onlu ingame song + bne noingame ; noMusic blocks only ingame song bit noMusic spl:lda #song_silencio noingame @@ -1691,11 +1698,20 @@ PLAYER .ECHO 'PLAYER: ',* icl 'artwork/sfx/rmtplayr.a65' + .IF target=5200 MODUL equ $b000 ;address of RMT module - opt h- ;RMT module is standard Atari binary file already - ins "artwork/sfx/scorch_str6.rmt" ;include music RMT module - opt h+ + opt h- ;RMT module is standard Atari binary file already + ins "artwork/sfx/scorch_SFX-only-str.rmt" ;include music RMT module + opt h+ + + .ELSE +MODUL equ $b000 ;address of RMT module + opt h- ;RMT module is standard Atari binary file already + ins "artwork/sfx/scorch_str6.rmt" ;include music RMT module + opt h+ + .ENDIF ; +MODULEND ;---------------------------------------------- org $bf80 font4x4 diff --git a/scorch.xex b/scorch.xex index d54baeae4b517bdb5fd07991ba525ded000b9956..62634f5f1219d5a60c25c5e1ce2e46286d2de153 100644 GIT binary patch delta 14379 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%0Al`W>)7tFY%@qiYe~;c@A|(hb5EGK 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