Starting from:

$25

CS2261-LAB 7 Sprites Solved

In    this    lab,    you    will    be    completing    several    different    TODOs,    which    will,    piece    by    piece,    
complete    an    animated    goomba character    that    the    player    can    control.    This    lab    will    provide    
significantly    more    detail    in    the    comments    of    the    code,    so    READ    VERY    CAREFULLY. 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.0    - Loading    and    Enabling    Sprites
Let’s    set    up    sprites!

● TODO    1.0
○ In    main.c,    #include    spritesheet.h
● TODO    1.1
○ In    initialize(),    load    the    spritesheet    palette    and    tiles    into    their    desired    spaces    
in    memory
■ HINT: The    sprite    palette    is    different    from    the    background    palette    
(check    myLib.h)
■ HINT: Which    charblock    do    sprite    tiles    go    in?
● TODO    1.2
○ In    myLib.c,    complete    hideSprites()
○ In    main.c,    uncomment    the    hideSprites()    call
● TODO    1.3
○ In    initialize(),    enable    sprites
● Build    and    run.    You    should    not    see    anything    new.    If    you    see    anything    in    the    top-left    
(CORNERFACE),    fix    this    before    going    further.
TODO    2.0
● At    the    bottom    of    initialize(),    READ    CAREFULLY    all    of    the    animation    variables    for    the    
goomba player
● Look    back    at    the    spritesheet    to    see    how    it    is    organized
TODO    2.1    - 2.9    - Animating    Sprites
Let’s    get    the    goomba showing    and    its animations    working!
● TODO    2.1
○ If    the    sprite    is    not    idle:
■ Set    the    previous    state    to    the    current    state
■ Then    reset    the    goomba’s state    to    idle
● TODO    2.2
○ Increment    the    goomba’s current    frame
○ HINT: there    are    only    numFrames    number    of    frames,    and    the    frames    of    the    
animation    must    end    up    LOOPING
● TODO    2.3    - 2.6
○ Set    the    goomba’s aniState    accordingly
● TODO    2.7
○ If    the    goomba is    idle:
■ We    want    the    current    frame    to    be    of    the    goomba standing    (frame    0)    in    
whatever    direction    he    was    last    facing    (current    state    set    to    the    
previous    state)
○ Else:
■ Increment    the    animation    counter
● TODO    2.8

○ Set    up    all    of    the    sprite    attributes,    place    the    sprite    at    index    0    of    the    
shadowOAM
■ Look    at    myLib.h    for    sprite    stuff!
○ Hint:    Open    up    spritesheet.bmp    and    look    at    how    the    sprites    are    organized.    
Animation    states    correspond    to    columns,    and frames    are    the    rows    of    the    
spritesheet
○ Hint:    this    sprite    is    32    x    32,    you    are    going    to    need    to    do    some    multiplication    
when    setting    up    ATTR2    TILEID
■ Each    tile    is    8x8
■ When    the    goomba is    idle,    where    does    that    correspond    to    on    the    
spritesheet?    (0,0)    because    the    sprite    begins    at    tile    0,0    and    takes    up    4    
tiles    wide    and    4    tiles    tall
● TODO    2.9
○ Copy    the    shadowOAM    into    the    OAM
○ HINT: how    many    sprites    can    we    have    in    the    OAM?    How    many    attributes    does    
each    sprite    have?
○ Build    and    run.    You    should    be    able    to    walk    the    player    goomba around,    see    the    
background    repeat    and    all    while    the    player    is    at    the    bottom-center    of    the    
screen.    If    this    is    not    the    case,    fix    this    before    moving    forward
TODO    3.0
● At    the    bottom    of    initialize(),    READ    CAREFULLY    all    of    the    animation    variables    for    the    
flowers
● Look    back    at    the    spritesheet    to    see    how    it    is    organized
TODO    3.1    - 3.9    - Animating    Multiple    Sprites
Let’s    get    multiple    flowers showing    and    animating!    These    sprites    will    all    be    doing    the    same    
animation    (a    single    state)    and    it    will    be    continuously    looping,    so    no    need    to    worry    about    
checking    for    button    inputs    here!
● TODO    3.1
○ Increment    each    flower’s    current    frame    of    animation    every    12    frames    of    
gameplay
○ You    will    also    need    to    increment    each    flower’s    aniCounter
○ Refer    to    the    code    associated    with    TODO    2.2    for    how    to    check    for    frames    of    
gameplay
○ HINT: there    are    only    numFrames    number    of    frames,    and    the    frames    of    the    
animation    must    end    up    LOOPING
● TODO    3.2
○ Loop    through    each    flower and    set    up    all    of    the    sprite    attributes
■ BE    CAREFUL    when    placing    the    sprites    in    the    shadowOAM    as    to    not    
overwrite    where    the    player    sprite    is    (shadowOAM[0])
■ Since    we    only    have    a    single    state    for    our    flowers,    it’s    col    value    of    

TILEID    will    not    change.    However,    now    we    are    starting    
from    lower    in    the    spritesheet,    so    we    will    need    to    add    the    starting    tile    
row    (12)    to    our    curFrame    value    calculation
■ Look    at    myLib.h    for    sprite    stuff!
○ Hint:    Open    up    spritesheet.bmp    and    look    at    how    the    sprites    are    organized.    
Animation    states    correspond    to    columns,    and    frames    are    the    rows    of    the    
spritesheet
○ Hint:    this    sprite    is    16    x    16,    you    are    going    to    need    to    do    some    multiplication    
when    setting    up    ATTR2    TILEID    for    the    curFrame
■ Each    tile    is    8x8
■ Where    does    the    flower sprite    start    in    the    spritesheet?    (0,12)    -- in    tiles.    
This    location    is    the    first    frame    of    our    flower
■ The    sprite    takes    up    2    tiles    wide    and    2    tiles    tall
● TODO    3.3
○ Build    and    run.    You    should    now    see    4    flowers    at    the    bottom    of    the    screen,    
continuously    moving    up    and    down    slightly    and    shining.    They    should    follow    
the    player,    stuck    at    the    bottom    of    the    screen    as    the    player    goomba moves.

More products