Starting from:

$25

CS2261-Lab 08 Backgrounds Solved

In    this    lab,    you’ll    be    completing    several    different    TODOs,    which    will,    piece    by    piece    display    
multiple,    simultaneously appearing,    scrollable    backgrounds    in    Mode    0.    This    is    an    example    of    
how     you     can     find     a     background     image     on     a     site     like     OpenGameArt     to     create     a     dynamic    
background!    In    this    case,    separate    images    (one    of    grass,    and    one    of    clouds)    were    used.    Your    
code    may    not    compile    until    you    complete    an    entire    TODO block,    at    which    point     the    game    
should    compile    with    a    new    component    of    the    final    outcome    (unless    otherwise    specified).    
TODO    1    - Exporting    clouds.bmp
Let’s    set    up    one    background     first    before    moving    on    to    any    others.    This    will    be    the     further    
background.
● TODO    1.0

○ Open    clouds.bmp    in    Usenti
● TODO    1.1
○ The    palette    and    image    have    been    set    up     for    you    (the    palette    is    reduced     to    a    
single    row    of    colors,    the    transparent    color    is    at    index    0,    and    the    image    is    an    
appropriate    size).    
○ Go    to    Image Export,    keep    the    default    name,    and    make    sure    the    type    is    GBA
source. Make    sure    that    it    is    exporting    to    your    Lab08    folder.
● TODO    1.2
○ Since    we    are    using    multiple    backgrounds    in    this    lab,    the    easiest    way    to    do    this    
is    by    using:
■ 4BPP    tiles    (so    that    their    individual    palettes    can    fit    onto a    single    master    
palette,    the    key    here    is    that    we    are    utilizing    the    transparent    color    for    
each    row)
○ Your    export    settings should    be    as    follows:
■ 4BPP
■ Map is checked, sbb selected
■ Pal is checked
TODO 2.0    - Setting    up    Mode    0    and    displaying    clouds
Now    we    are    going    to    set    up    the    background    so    that    we    can    actually    see    it.
● TODO    2.0
○ At    the    top    of    main.c,    #include the    .h    file    for    the    image    you    just    exported
● TODO    2.1
○ In    the    initialize    function,    set    up    the    Display    Control    Register    (REG_DISPCTL)
■ We    want    to    use    Mode    0
■ Enable    background    1
● We    are    not    enabling    background    0    since    we    want    this    image    to    
be    behind    the    next    background    we    will    load    in    later.
■ Look    at    myLib.h    for    macros    to    help    you    set    this    up
● TODO    2.2
○ Load    your    tiles’    palette    (which    was    exported    along    with    it)    into    the    PALETTE
● TODO    2.3
○ Set    up    background    1’s    control    register
■ The    background    is    512x160 pixels    (think    about    what    size to    tell    the    
GBA    that    it    is    and    where    to    put    the    tiles    and    map)
● Remember,     we     need     to     set     up     the     charblock     to     tell     the     tiles    
where    to    go    and    screenblocks    to    tell    where    the    map    will    go
● Look    at    myLib.h    for    the    necessary    macros    for    background    sizes,    
background     registers,     and     background     charblock     and    
screenblock
● TODO    2.4

○ Use     DMANow to     load     the    tiles into     the     correct     character     block.    
Make    sure    it    is    the    SAME    character    block    that    you    told    background    1    to    find    
them    in    the    previous    TODO.
■ This    is    referring    to    the    actual    CHARBLOCK    struct
■ Check    myLib.h under    //    Character    and    Screen    Blocks
● TODO    2.5
○ Use    DMANow to    load    the    map into    the    correct    screenblock.    Make    sure    it    is    the    
same    screenblock    you    told    background    1    to    find    it    in    TODO    2.3.
■ This    is    referring    to    the    actual    SCREENBLOCK    struct
■ Check    myLib.h    under    //    Character    and    Screen    Blocks
○ Build    and    run.    You    should    see    your    clouds map,    and    be    able    to    scroll    it    with    the    
left    and    right    arrow    keys    (the    map    should    loop    as    you    move    in    one    direction).    
If    not,    fix    this    before    continuing.
TODO    3.0    - Exporting    grass.bmp
Let’s    set    up    the    closer    background    now.
● TODO    3.0    
○ Open    grass.bmp    in    Usenti
● TODO    3.1    
○ This    background    will    appear    at    the    same    time    as    the    other    background,    so    they    
have    to    share    the    same    master    palette.
○ First,    we    want     to     get     these     colors     onto the     palette     of     the     one     that    we     have    
already    loaded    in    (the    palette    of    clouds).
○ Go    to    Image Export and    save    the    type    as    Palette    (.pal).
■ You    can    export    just    the    16    colors    that    you    need    (start:    0,    count    16)
● TODO    3.2    
○ Now,    we    need    to    tell    grass.bmp    to    use    the    second    row    of    the    “master”    palette    
since    we    know    that    the    other    background    is    using    the    first    row.
○ Go    to    Palette Swap
■ Swap    the    first    row    of    16    colors    with    the    second    row    of    16    colors
● First    Index:    beginning    of    the first    row    (0    in    this    case)
● Second    Index:    beginning    of    the    second    row    (16    in    this    case)
● Count:    number    of    colors    being    swapped    (16    since    each    row    has    
16    colors)
■ When     you     hit     swap,     you     should     see     the     entire     row     of     colors     this    
background    image    is    using    move    to    the    second    row.
● TODO    3.3
○ Export    this    image    the    same    way    you    exported    the    last    one:    
■ Image Export

● GBA    source
○ 4BPP
○ Map    is    checked,    sbb    selected
○ Palette    checked
● TODO    3.4
○ Now,    we’ve    told    this    new    background    image    to    use    the    second    row    of    colors    
within    a    “master    palette”.    In    order    to    create    this    palette,    we    need    to    merge    the    
colors    into    our    previous    background’s    palette.
○ Open    clouds.bmp again    and    go    to    Image Import
■ Import    the    palette    (.pal) we    exported    in    TODO    3.1
● Remember,    this    is    just    the    set    of    16    colors    that    the    background    
was    using
■ We    want    to    put    them    on    the    second    row    of    the    clouds.bmp    palette
● Source:    0    (from    this    palette    we    are    importing,    start    at    index    0)
● Destination:     16     (to     this     palette     we     are     importing     to,     start    
placing    it    at    index    16    -- first    spot    of    the    2nd    row)
● Count:    16    (16    colors)
● Note:     You     should     see     both     rows     have     their     OWN     transparent    
color    at    the    first    index    of    their    rows    (magenta).    This    is    necessary    
in    order    to    be    able    to    see    layered    backgrounds.
○ For    the    GBA    to    get    these    changes,    we    need    to    re-export.
■ Export    as:    GBA    source,    with    the    same    export    settings    as    before.
■ The     new     colors     will     now     be     a     part     of     the     palette     we     were     DMAing    
before.
○ If    you build    and    run    right    now,    you    should    not    see    any    changes.    If    you    see    that    
your     image     is     using     different     colors     now,     then     you     have     not     merged     the    
palettes    correctly.    Fix    this    before    continuing.
TODO    4    - Displaying    grass
We    want    to    be    able    to    actually    see    the    new    background,    so    let’s    set    that    up.
● TODO    4.0
○ At    the    top    of    main.c,    #include the    .h    file    for    the    grass
● TODO    4.1
○ In     the     initialize     function,     tell     the     Display     Control     Register     to     also     enable
background    0 for    our    new    map.
● TODO    4.2
○ Set    up    background    0’s    control    register.    The    BG    will    display    a    256x160 pixel    
background,    so    think    about    what    size    this    translates    to    and    where    to    put    the    
tiles    and    map    (save    enough    room    for    them,    but    waste    no    space,    and    make    sure    
it    doesn’t    overwrite    background    1).
● TODO    4.3

○ Use    DMANow to    load    the    tiles    into    the    correct    character    block.    Make    
sure    it    is    the    same    character    block    where    you    told    background    0 to    find    them.
● TODO    4.4
○ Use    DMANow to    load    the    map    into    the    correct    screen    block.    Make    sure    it    is    the    
same    screenblock    where    you    told    background    0 to    find    it.
○ Build    and    run.    You    should    see    both    the    grass and    clouds maps    (grass layered    
on    top    of    clouds)    and    be    able    to    scroll    both    with    the    left    and    right    keys.    They    
will    move    together.    If    not,    fix    this    before    continuing.
TODO 5    - Parallax
The    clouds image    should    look    like    it’s    farther    away.    However,    we    aren’t    currently    creating    
that    illusion.    In    real    life,    when    you    move,    the    things    that    are    farther    away    look    like    they    are    
moving    more    slowly.    Implement    that    here.
● TODO    5.0
○ At     the     bottom     of    game(),     find where     the    background     offset     registers are    
being     updated.     Change     the     line     that     updates     the     offset     for     the     clouds
background    so    that    it    moves    more    slowly.
○ HINT: for    every    4 pixelsthat    grass moves,    clouds should    only    move    one    (clouds
moves    a    quarter as    fast    as    grass)
■ Use    your    Pre-algebra    skills.
● Build     and     run.    When     you     scroll,     clouds should     move     more     slowly,     and     create     the    
illusion    of    depth    (motion    parallax).

More products