Skip to content

Commit

Permalink
fix: 'Screen->Lit' not compiling; now properly returns (and sets) scr…
Browse files Browse the repository at this point in the history
…een's lit state
  • Loading branch information
EmilyV99 committed Apr 8, 2024
1 parent 4b50afc commit 8f50a32
Show file tree
Hide file tree
Showing 10 changed files with 55 additions and 22 deletions.
25 changes: 24 additions & 1 deletion src/pal.cpp
Expand Up @@ -521,7 +521,30 @@ void lightingInstant()

naturaldark = newstate;
}

bool get_lights()
{
if(get_qr(qr_NEW_DARKROOM))
return !room_is_dark;
return !room_is_dark || stayLit;
}
void set_lights(bool state, int32_t specialstate)
{
room_is_dark = !state;
if(!get_qr(qr_NEW_DARKROOM))
{
naturaldark = !state;
lighting(false, false);
}
}
void toggle_lights(int32_t specialstate)
{
room_is_dark = get_lights();
if(!get_qr(qr_NEW_DARKROOM))
{
naturaldark = room_is_dark;
lighting(false, false);
}
}
byte drycolors[11] = {0x12,0x11,0x22,0x21,0x31,0x32,0x33,0x35,0x34,0x36,0x37};

void dryuplake()
Expand Down
3 changes: 3 additions & 0 deletions src/pal.h
Expand Up @@ -27,6 +27,9 @@ extern void ringcolor(bool forceDefault);
extern void fade(int32_t level,bool blackall,bool fromblack);
extern void lighting(bool existslight, bool setnaturaldark = false, int32_t specialstate = pal_litRESET);
extern void lightingInstant();
extern bool get_lights();
extern void set_lights(bool state, int32_t specialstate = pal_litRESET);
extern void toggle_lights(int32_t specialstate = pal_litRESET);
extern void dryuplake();
extern void rehydratelake(bool instant);
extern void reset_pal_cycling();
Expand Down
2 changes: 2 additions & 0 deletions src/zasm_table.cpp
Expand Up @@ -2925,6 +2925,8 @@ script_variable variable_list[]=
{ "WEBSOCKET_URL", WEBSOCKET_URL, 0, 0 },
{ "WEBSOCKET_HAS_MESSAGE", WEBSOCKET_HAS_MESSAGE, 0, 0 },
{ "WEBSOCKET_MESSAGE_TYPE", WEBSOCKET_MESSAGE_TYPE, 0, 0 },

{ "LIT", LIT, 0, 0 },

{ " ", -1, 0, 0 }
};
Expand Down
5 changes: 2 additions & 3 deletions src/zc/ffscript.cpp
Expand Up @@ -9967,7 +9967,7 @@ int32_t get_register(int32_t arg)


case LIT:
ret= darkroom ? 0 : 10000;
ret= get_lights() ? 10000 : 0;
break;

case WAVY:
Expand Down Expand Up @@ -22996,8 +22996,7 @@ void set_register(int32_t arg, int32_t value)
break;

case LIT:
naturaldark = !value;
lighting(false, false);
set_lights(value);
break;

case WAVY:
Expand Down
17 changes: 9 additions & 8 deletions src/zc/hero.cpp
Expand Up @@ -28299,6 +28299,7 @@ void HeroClass::scrollscr(int32_t scrolldir, int32_t destscr, int32_t destdmap)
return;
bool isForceFaceUp = getOnSideviewLadder() && canSideviewLadder() &&
!(jumping<0 || fall!=0 || fakefall!=0) && get_qr(qr_SIDEVIEWLADDER_FACEUP);
bool room_was_dark = room_is_dark;
if(isForceFaceUp) dir = up;
kill_enemy_sfx();
stop_sfx(QMisc.miscsfx[sfxLOWHEART]);
Expand Down Expand Up @@ -28662,7 +28663,7 @@ void HeroClass::scrollscr(int32_t scrolldir, int32_t destscr, int32_t destdmap)

// The naturaldark state can be read/set by an FFC script before
// fade() or lighting() is called.
naturaldark = ((TheMaps[currmap*MAPSCRS+currscr].flags & fDARK) != 0);
naturaldark = !get_qr(qr_NEW_DARKROOM) && (newscr->flags & fDARK);

if(newscr->oceansfx != oldscr->oceansfx) adjust_sfx(oldscr->oceansfx, 128, false);

Expand Down Expand Up @@ -29014,7 +29015,7 @@ void HeroClass::scrollscr(int32_t scrolldir, int32_t destscr, int32_t destdmap)
blit_msgstr_fg(framebuf, tx2, ty2, 0, playing_field_offset, 256, 168);
}

if(get_qr(qr_NEW_DARKROOM) && ((newscr->flags&fDARK)||(oldscr->flags&fDARK)))
if(get_qr(qr_NEW_DARKROOM) && (room_is_dark||room_was_dark))
{
clear_darkroom_bitmaps();
calc_darkroom_combos(true);
Expand All @@ -29026,7 +29027,7 @@ void HeroClass::scrollscr(int32_t scrolldir, int32_t destscr, int32_t destdmap)
set_clip_rect(framebuf, 0, playing_field_offset, 256, 168+playing_field_offset);
int32_t dx1 = FFCore.ScrollingData[SCROLLDATA_NX], dy1 = FFCore.ScrollingData[SCROLLDATA_NY]+playing_field_offset;
int32_t dx2 = FFCore.ScrollingData[SCROLLDATA_OX], dy2 = FFCore.ScrollingData[SCROLLDATA_OY]+playing_field_offset;
if(newscr->flags & fDARK)
if(room_is_dark)
{
if(newscr->flags9 & fDARK_DITHER) //dither the entire bitmap
{
Expand All @@ -29042,7 +29043,7 @@ void HeroClass::scrollscr(int32_t scrolldir, int32_t destscr, int32_t destdmap)
draw_trans_sprite(framebuf, darkscr_bmp_curscr_trans, dx1, dy1);
color_map = &trans_table;
}
if(oldscr->flags & fDARK)
if(room_was_dark)
{
if(oldscr->flags9 & fDARK_DITHER) //dither the entire bitmap
{
Expand All @@ -29069,7 +29070,7 @@ void HeroClass::scrollscr(int32_t scrolldir, int32_t destscr, int32_t destdmap)
set_clip_rect(framebuf, 0, playing_field_offset, 256, 168+playing_field_offset);
int32_t dx1 = FFCore.ScrollingData[SCROLLDATA_NX], dy1 = FFCore.ScrollingData[SCROLLDATA_NY]+playing_field_offset;
int32_t dx2 = FFCore.ScrollingData[SCROLLDATA_OX], dy2 = FFCore.ScrollingData[SCROLLDATA_OY]+playing_field_offset;
if(newscr->flags & fDARK)
if(room_is_dark)
{
if(newscr->flags9 & fDARK_DITHER) //dither the entire bitmap
{
Expand All @@ -29085,7 +29086,7 @@ void HeroClass::scrollscr(int32_t scrolldir, int32_t destscr, int32_t destdmap)
draw_trans_sprite(framebuf, darkscr_bmp_curscr_trans, dx1, dy1);
color_map = &trans_table;
}
if(oldscr->flags & fDARK)
if(room_was_dark)
{
if(oldscr->flags9 & fDARK_DITHER) //dither the entire bitmap
{
Expand Down Expand Up @@ -29198,7 +29199,7 @@ void HeroClass::scrollscr(int32_t scrolldir, int32_t destscr, int32_t destdmap)
throwGenScriptEvent(GENSCR_EVENT_CHANGE_LEVEL);
}
}

//if Hero is going from non-water to water, and we set his animation to "hopping" above, we must now
//change it to swimming - since we have manually moved Hero onto the first tile, the hopping code
//will get confused and try to hop Hero onto the next (possibly nonexistant) water tile in his current
Expand Down Expand Up @@ -29283,7 +29284,7 @@ void HeroClass::scrollscr(int32_t scrolldir, int32_t destscr, int32_t destdmap)
{
action=none; FFCore.setHeroAction(none);
}

if(action != attacking && action != sideswimattacking)
{
charging = 0;
Expand Down
9 changes: 6 additions & 3 deletions src/zc/maps.cpp
Expand Up @@ -4471,14 +4471,14 @@ void draw_screen(mapscr* this_screen, bool showhero, bool runGeneric)
particles.draw(framebuf, true, 5);

//11. Handle low drawn darkness
if(get_qr(qr_NEW_DARKROOM)&& (this_screen->flags&fDARK))
if(get_qr(qr_NEW_DARKROOM)&& room_is_dark)
{
calc_darkroom_combos();
if(showhero)
Hero.calc_darkroom_hero();
}
//Darkroom if under the subscreen
if(get_qr(qr_NEW_DARKROOM) && get_qr(qr_NEWDARK_L6) && (this_screen->flags&fDARK))
if(get_qr(qr_NEW_DARKROOM) && get_qr(qr_NEWDARK_L6) && room_is_dark)
{
do_primitives(framebuf, SPLAYER_DARKROOM_UNDER, this_screen, 0, playing_field_offset);
set_clip_rect(framebuf, 0, playing_field_offset, 256, 168+playing_field_offset);
Expand Down Expand Up @@ -4523,7 +4523,7 @@ void draw_screen(mapscr* this_screen, bool showhero, bool runGeneric)
}

//14. Handle high-drawn darkness
if(get_qr(qr_NEW_DARKROOM) && !get_qr(qr_NEWDARK_L6) && (this_screen->flags&fDARK))
if(get_qr(qr_NEW_DARKROOM) && !get_qr(qr_NEWDARK_L6) && room_is_dark)
{
do_primitives(framebuf, SPLAYER_DARKROOM_UNDER, this_screen, 0, playing_field_offset);
set_clip_rect(framebuf, 0, playing_field_offset, 256, 168+playing_field_offset);
Expand Down Expand Up @@ -5139,12 +5139,15 @@ void loadscr(int32_t tmp,int32_t destdmap, int32_t scr,int32_t ldir,bool overlay
mapscr ffscr = tmpscr[tmp];
tmpscr[tmp] = TheMaps[currmap*MAPSCRS+scr];
if (!tmp)
{
room_is_dark = (tmpscr[tmp].flags & fDARK);
for(int i = 0; i < MAXFFCS; ++i)
{
tmpscr[tmp].ffcs[i].setLoaded(true);
tmpscr[tmp].ffcs[i].solid_update(false);
screen_ffc_modify_postroutine(i);
}
}

tmpscr[tmp].valid |= mVALID; //layer 0 is always valid
memcpy(tmpscr[tmp].data, TheMaps[currmap*MAPSCRS+scr].data, sizeof(tmpscr[tmp].data));
Expand Down
2 changes: 1 addition & 1 deletion src/zc/zc_sprite.cpp
Expand Up @@ -52,7 +52,7 @@ void sprite::check_conveyor()
void sprite::handle_sprlighting()
{
if(!get_qr(qr_NEW_DARKROOM)) return;
if(!(tmpscr->flags & fDARK)) return;
if(!room_is_dark) return;
handle_lighting(x.getInt()+(hit_width/2), y.getInt()+(hit_height/2),glowShape,glowRad,dir);
}

Expand Down
10 changes: 6 additions & 4 deletions src/zc/zelda.cpp
Expand Up @@ -357,7 +357,7 @@ bool GameLoaded = false;
bool __debug=false,debug_enabled = false;
bool refreshpal,blockpath = false,loaded_guys= false,freeze_guys= false,
loaded_enemies= false,drawguys= false,watch= false;
bool darkroom=false,naturaldark=false,BSZ= false; //,NEWSUBSCR;
bool room_is_dark=false, darkroom=false,naturaldark=false,BSZ= false; //,NEWSUBSCR;

bool down_control_states[controls::btnLast] = {false};
bool F12= false,F11= false, F5= false,keyI= false, keyQ= false,
Expand Down Expand Up @@ -1628,7 +1628,7 @@ void init_game_vars(bool is_cont_game = false)
script_hero_sprite = 0;
script_hero_flip = -1;
script_hero_cset = -1;
darkroom=naturaldark=false;
room_is_dark=darkroom=naturaldark=false;
sle_x=sle_y=newscr_clk=opendoors=0;
Bwpn=Awpn=Xwpn=Ywpn=-1;
FFCore.kb_typing_mode = false;
Expand Down Expand Up @@ -1919,6 +1919,7 @@ int32_t init_game()
}
//loadscr(0,currscr,up);
loadscr(0,currdmap,currscr,-1,false);

putscr(scrollbuf,0,0,&tmpscr[0]);
putscrdoors(scrollbuf,0,0,&tmpscr[0]);

Expand Down Expand Up @@ -2284,12 +2285,13 @@ int32_t cont_game()
ALLOFF();
whistleclk=-1;
currcset=DMaps[currdmap].color;
darkroom=naturaldark=false;
room_is_dark=darkroom=naturaldark=false;
tmpscr[0].zero_memory();
tmpscr[1].zero_memory();

//loadscr(0,currscr,up);
loadscr(0,currdmap,currscr,-1,false);

putscr(scrollbuf,0,0,&tmpscr[0]);
putscrdoors(scrollbuf,0,0,&tmpscr[0]);
script_drawing_commands.Clear();
Expand Down Expand Up @@ -2435,7 +2437,7 @@ void restart_level()

ALLOFF();
whistleclk=-1;
darkroom=naturaldark=false;
room_is_dark=darkroom=naturaldark=false;
tmpscr[0].zero_memory();
tmpscr[1].zero_memory();

Expand Down
2 changes: 1 addition & 1 deletion src/zc/zelda.h
Expand Up @@ -372,7 +372,7 @@ extern bool loaded_enemies,drawguys,debug_enabled,watch;
extern bool down_control_states[controls::btnLast];
extern bool F12,F11,F5,keyI, keyQ;
extern bool SystemKeys,NESquit,volkeys,useCD,boughtsomething;
extern bool fixed_door, darkroom,naturaldark,BSZ; //,NEWSUBSCR;
extern bool fixed_door, room_is_dark, darkroom,naturaldark,BSZ; //,NEWSUBSCR;
extern bool hookshot_used, hookshot_frozen, pull_hero, hs_fix, hs_switcher, cheat_superman, gofast, checkhero;
extern bool ewind_restart, didpit, heart_beep, pausenow, castnext;
extern bool add_df1asparkle, add_df1bsparkle, add_nl1asparkle, add_nl1bsparkle, add_nl2asparkle, add_nl2bsparkle;
Expand Down
2 changes: 1 addition & 1 deletion tests/scripts/armos_expected.txt
Expand Up @@ -11,7 +11,7 @@ Compile finished with exit code '0' (success)
=== METADATA (elided)
{
"currentFileSymbols": 13,
"symbols": 23,
"symbols": 24,
"identifiers": 70
}
PUSHR d0; void run(int) Params
Expand Down

0 comments on commit 8f50a32

Please sign in to comment.