gbadev.org forum archive

This is a read-only mirror of the content originally found on forum.gbadev.org (now offline), salvaged from Wayback machine copies. A new forum can be found here.

Coding > Help with blending

#4619 - recondite - Sat Apr 05, 2003 1:49 am

I have been having alot of trouble getting two backgrounds to blend, background 0 onto background2

my goal is to have a "shadow" effect. background 0 is just black and transparent.

this is the portion of my code that is doing the blending
Code:

setblend
   @define REG_BLDCNT   0x4000050
   @define REG_BLDAlPHA    0x4000052 ; alpha
   @define REG_BLDY    0x4000054 ; darken lighten
   
   ldr r1,=REG_BLDCNT
   ldr r2,=0x00010001000001
   str r2,[r1]
   
   ldr r1,=REG_BLDAlPHA
   ldr r2,=0x0100000000000
   str r2,[r1]
   
   mov pc,lr


It doesn't seam to work for me. I just get my pureblackshadows.
Its driving me nuts i hope somebody can figure out what i am doing wrong

thanks





ps. my code in its entirity is below
Code:

; Joe and Aaron's rpg  jarg
@include jarg.h

b init
;data
   ;tiledata       @incbin    viragetileset.raw
   tiledata       @incbin    GreenHL.raw
   palletedata @incbin    master.pal
   map2data      @include   hallway.map
   ;map0data      @incbin      shadraw.raw   
   map0data      @include    hallwayshadow.map



start_wram_vars
@textarea 0x03000000
   bg2scrlx @DCD 0; bg scroll
   bg2scrly @DCD 0; bg scroll
   ;sp1x @DCD 0; sprite x
   ;sp1y @DCD 0; sprite y
@endarea
end_wram_vars

init
   bl setmode
   bl copyvars
   bl loadtiles
   bl loadbgpal
   bl loadmaps
   bl setblend
   ;bl makesprite
   ;bl loadsprite
   ;bl loadsppal

mainloop
   bl waitforvsync
   bl getkeys
   bl draw
   bl delay   ; slow it all down
   ;bl delay
   b mainloop

setmode
   ldr r1,=REG_DISPCNT
   ldr r2,=(MODE_0|BG2_ENABLE|BG0_ENABLE)
   str r2,[r1]
   ldr r1,=REG_BG2CNT
   ldr r2,=(TEXTBG_SIZE_512x512|BG_COLOR_256|(15<<SCREEN_SHIFT))
   str r2,[r1]
   ldr r1,=REG_BG0CNT
   ldr r2,=(TEXTBG_SIZE_512x512|BG_COLOR_256|(20<<SCREEN_SHIFT))
   str r2,[r1]
   mov pc,lr
   
setblend
   ;blending is super gay, all i want is my fn shadows to be 50% transparent for christs sake
   @define REG_BLDCNT   0x4000050
   @define REG_BLDAlPHA    0x4000052 ; alpha
   @define REG_BLDY    0x4000054 ; darken lighten
   
   ldr r1,=REG_BLDCNT
   ldr r2,=0x00010001000001
   str r2,[r1]
   
   ldr r1,=REG_BLDAlPHA
   ldr r2,=0x0100000000000
   str r2,[r1]
   
   mov pc,lr
   
copyvars  ; can posibly do this with dma
   mov r0,start_wram_vars
   mov r1,end_wram_vars
   mov r2,$03000000
   romtowram_loop
      ldr r3,[r0]+4!
      str r3,[r2]+4!
      cmp r0,r1
      ble romtowram_loop
   mov pc,lr
   
loadtiles
   ldr r1,=REG_DMA3SAD
   ldr r2,=tiledata
   str r2,[r1]
   ldr r1,=REG_DMA3DAD
   LoadCharBlockAddr r2, 0
   str r2,[r1]
   ldr r1,=REG_DMA3CNT
   ldr r2,=(8192|DMA_32NOW)
   str r2,[r1]
   mov pc,lr
   
loadbgpal
   ldr r1,=REG_DMA3SAD
   ldr r2,=palletedata
   str r2,[r1]
   ldr r1,=REG_DMA3DAD
   ldr r2,=VPAL
   str r2,[r1]
   ldr r1,=REG_DMA3CNT
   ldr r2,=(128|DMA_32NOW)
   str r2,[r1]
   mov pc,lr
   
loadmaps
   ;bg2
   ldr r1,=REG_DMA3SAD
   ldr r2,=map2data
   str r2,[r1]
   ldr r1,=REG_DMA3DAD
   LoadScreenBlockAddr r2, 15
   str r2,[r1]
   ldr r1,=REG_DMA3CNT
   ldr r2,=(2048|DMA_32NOW)
   str r2,[r1]
   
   ;bg0
   ldr r1,=REG_DMA3SAD
   ldr r2,=map0data
   str r2,[r1]
   ldr r1,=REG_DMA3DAD
   LoadScreenBlockAddr r2, 20
   str r2,[r1]
   ldr r1,=REG_DMA3CNT
   ldr r2,=(2048|DMA_32NOW)
   str r2,[r1]
   mov pc,lr

waitforvsync
   ldr r7,=REG_DISPCNT
   vsyncloop
      ldrh r8,[r7,+$06]
      cmp r8,160
      blt vsyncloop
   mov pc, lr
   
getkeys
   ldr r1,=KEYS
   ldr r2,[r1]
   ands r1,r2,#KEY_UP
   beq do_keyup
   upret
   ands r1,r2,#KEY_DOWN
   beq do_keydown
   downret
   ands r1,r2,#KEY_LEFT
   beq do_keyleft
   leftret
   ands r1,r2,#KEY_RIGHT
   beq do_keyright
   rightret
   ands r1,r2,#KEY_A
   beq do_keya
   aret
   ands r1,r2,#KEY_B
   beq do_keyb
   bret
   mov pc,lr
   
do_keyup
   mov r0,bg2scrly
  ldr r1,[r0]
   cmp r1,1 ; limit scrolling upper boundy
   ble upret
   sub r1,r1,1
   str r1,[r0]
   b upret
      
do_keydown
   mov r0,bg2scrly
  ldr r1,[r0]
   cmp r1,352 ; lower boundy
   bge downret
   add r1,r1,1
   str r1,[r0]
   b downret
   
do_keyleft
   mov r0,bg2scrlx
  ldr r1,[r0]
   cmp r1,1    ; keft boundy
   ble leftret
   sub r1,r1,1
   str r1,[r0]
   b leftret
   
do_keyright
   mov r0,bg2scrlx
  ldr r1,[r0]
   cmp r1,272 ; right boundy
   bge rightret
   add r1,r1,1
   str r1,[r0]
   b rightret
   
do_keya
   ; turn on shadows
   ldr r1,=REG_DISPCNT
   ldr r3,=(MODE_0|BG2_ENABLE|BG0_ENABLE)
   str r3,[r1]
   b aret
   
do_keyb
   ; turn off shadows
   ldr r1,=REG_DISPCNT
   ldr r3,=(MODE_0|BG2_ENABLE)
   str r3,[r1]
   b bret
   
draw
   mov r0,bg2scrlx
   ldr r1,[r0]
   mov r0,bg2scrly
   ldr r2,[r0]
   mov r2,r2 lsl 16
   add r1,r1,r2
   ldr r3,=REG_BG2HOFS
   str r1,[r3]
   ldr r3,=REG_BG0HOFS
   str r1,[r3]
   mov pc,lr
   
delay
  ldr r0,=0
   delay_loop
      add r0,r0,1
      cmp r0,1024
      ble delay_loop
   mov pc,lr

#4622 - recondite - Sat Apr 05, 2003 5:04 am

figured it out thanks to dovoto


the code shoudl have been
Code:
   ldr r1,=0x4000050
   ldr r2,=0x08080441
   str r2,[r1]
   mov pc,lr


was suposed to write both at the same time. and 0xwhatever isn't binary stupid me its hex