Are get_sector_texture/get_wall_texture faulty - or is it my code... ?
Hello hello
So as you all know, ive been starting to make a Mode 8 survival horror style game, and while doing so I decided that I should recode the function for
blinking/flickering lights.
The new concept I had for the flickering light function is that there should be a global struct of walls, sectors, what light values they should have,
etc, and each time the light is set to "blink" it should read and save wall textures, floor textures, ceiling textures, wall luminosity and sector
luminosity into private variables, and then switch the environment temporarily to the global variables. Then, a few frames later, it should reset the
environment (walls/sectors) back to the original saved private variables.
I figured the best way to do this would be to use For loops - however, the code I managed to come up with has some issues and I'm unsure if its to do
with my programming or if maybe theres a problem with the get_sector_texture & get_wall_texture commands?
What happens at the moment is that the process will make the sector/walls will "light up", switching to the correct textures & luminositys, but
then when resetting they either change to the wrong texture and the wrong luminosity (far too bright) or they simply just switch to the wrong
luminosity.
Then, after they then blink again, they revert to the correct luminosity & texture. I can't seem to work out why this is happening, I've been
working on this bug for the best part of a week and I can't see what I'm doing wrong - is it my code, or is it the get_sector_texture/get_wall_texture
functions just being buggy?
Code:
Global
STRUCT light_fx_data[2];
light_sector_A; // Each light effect will need at least one sector that lights up, this is that
light_sector_A_offlumo;
light_sector_A_onlumo;
light_sector_A_floortex;
sector_list_A[49]; // all sector numbers
wall_list_A[49]; // all wall numbers
sector_lumo_A; // the lumo to set sectors to
wall_lumo_A; // the lumo to set walls to o
modify_sectorstex_A; // simple off/on - if set to 1, use below arrays (otherwise, ignore)
modify_wallstex_A; // simple off/on - if set to 1, use below arrays (otherwise, ignore)
modifyto_floortexture_sectors_A[49]; // list of "lit up" floor textures for sectors, corresponds with above array
modifyto_rooftexture_sectors_A[49]; // list of "lit up" roof textures for sectors, corresponds with above array
modifyto_texture_wall_A[49]; // list of "lit up" textures for walls, corresponds with above array
End
...
anim_light(1, 0, 20044, 15048);
light_fx_data[0].light_sector_A=111;
light_fx_data[0].light_sector_A_onlumo=8;
light_fx_data[0].light_sector_A_offlumo=11;
light_fx_data[0].light_sector_A_floortex=1;
light_fx_data[0].sector_lumo_A=8; // the lumo to set sectors to
light_fx_data[0].wall_lumo_A=11; // the lumo to set walls to
light_fx_data[0].modify_sectorstex_A=1;
light_fx_data[0].modify_wallstex_A=1;
// SECTORS
// Sector list A
light_fx_data[0].sector_list_A[0]=58;
light_fx_data[0].sector_list_A[1]=112;
(etc etc, all the values are set in a list)
...
Process anim_light(flickertype, lightnum, x, y);
Private
Lc;
Lc_limit;
orig_lc_limit;
set_save_arrays;
rand_lc_val;
double_flicker_chance;
orig_double_flicker_chance;
modify_sect_c;
modify_wall_c;
sectorsA_saved_lumos[50];
sectorsA_saved_floor_textures[50];
sectorsA_saved_roof_textures[50];
wallsA_saved_lumos[50];
wallsA_saved_textures[50];
Begin
SWITCH (flickertype); // Set flicker/blink patterns
CASE 0:
orig_lc_limit=90;
rand_lc_val=20;
END
CASE 1:
orig_lc_limit=150;
rand_lc_val=35;
END
END
lc_limit=orig_lc_limit;
Loop;
if (KEY(_T));
debug;
end
Lc++;
If (lc==lc_limit-5);
play_3dsound(x, y, sfx_flickerlight[rand(0, 2)], 0, 0, 4, 0);
// Actual light sector
set_sector_texture(light_fx_data[lightnum].light_sector_A, light_fx_data[lightnum].light_sector_A_floortex, 97, light_fx_data[lightnum].light_sector_A_onlumo);
// LIGHTS SWITCH 1 - switch to light_fx_data state (usually, lights on)
For(modify_sect_c=0;modify_sect_c<49;modify_sect_c++); // Sectors...
If (light_fx_data[lightnum].sector_list_A[modify_sect_c]==0); // Works fine
Break;
End
get_sector_texture(light_fx_data[lightnum].sector_list_A[modify_sect_c], OFFSET sectorsA_saved_floor_textures[modify_sect_c], OFFSET sectorsA_saved_roof_textures[modify_sect_c], OFFSET sectorsA_saved_lumos[modify_sect_c]); // SAVES env info to private arrays
If (light_fx_data[lightnum].modify_sectorstex_A==1);
set_sector_texture(light_fx_data[lightnum].sector_list_A[modify_sect_c], light_fx_data[lightnum].modifyto_floortexture_sectors_A[modify_sect_c], light_fx_data[lightnum].modifyto_rooftexture_sectors_A[modify_sect_c], light_fx_data[lightnum].sector_lumo_A); // CHANGES env textures & lumo
ELSE
set_sector_texture(light_fx_data[lightnum].sector_list_A[modify_sect_c], -1, -1, light_fx_data[lightnum].sector_lumo_A); // CHANGES env lumo
End
End
For(modify_wall_c=0;modify_wall_c<49;modify_wall_c++); // Walls...
If (light_fx_data[lightnum].wall_list_A[modify_wall_c]==0); // Works fine
Break;
End
get_wall_texture(light_fx_data[lightnum].wall_list_A[modify_wall_c], OFFSET wallsA_saved_textures[modify_wall_c], OFFSET wallsA_saved_lumos[modify_wall_c]); // SAVES env info to private
If (light_fx_data[lightnum].modify_wallstex_A==1);
set_wall_texture(light_fx_data[lightnum].wall_list_A[modify_wall_c], light_fx_data[lightnum].modifyto_texture_wall_A[modify_wall_c], light_fx_data[lightnum].wall_lumo_A); // CHANGES env lumo & texture
ELSE
set_wall_texture(light_fx_data[lightnum].wall_list_A[modify_wall_c], -1, light_fx_data[lightnum].wall_lumo_A); // CHANGES env lumo
End
End
End
if (lc=>lc_limit);
// Actual light sector
set_sector_texture(light_fx_data[lightnum].light_sector_A, -1, 38, light_fx_data[lightnum].light_sector_A_offlumo);
// LIGHTS SWITCH 2 - switch back to original state (usually, lights off)
// SECTORS
For(modify_sect_c=0;modify_sect_c<49;modify_sect_c++);
If (light_fx_data[lightnum].sector_list_A[modify_sect_c]==0); // Works fine
Break;
End
If (light_fx_data[lightnum].modify_sectorstex_A==1);
set_sector_texture(light_fx_data[lightnum].sector_list_A[modify_sect_c], sectorsA_saved_floor_textures[modify_sect_c], sectorsA_saved_roof_textures[modify_sect_c], sectorsA_saved_lumos[modify_sect_c]);
ELSE
set_sector_texture(light_fx_data[lightnum].sector_list_A[modify_sect_c], -1, -1, sectorsA_saved_lumos[modify_sect_c]);
End
End
// END SECTORS
// WALLS
For(modify_wall_c=0;modify_wall_c<49;modify_wall_c++); // Walls...
If (light_fx_data[lightnum].wall_list_A[modify_wall_c]==0); // Works fine
Break;
End
If (light_fx_data[lightnum].modify_wallstex_A==1);
set_wall_texture(light_fx_data[lightnum].wall_list_A[modify_wall_c], wallsA_saved_textures[modify_wall_c], wallsA_saved_lumos[modify_wall_c]);
ELSE
set_wall_texture(light_fx_data[lightnum].wall_list_A[modify_wall_c], -1, wallsA_saved_lumos[modify_wall_c]);
End
End
// END WALLS
lc=0;
End
// END SWITCH 2 CODE
Frame;
End
End
Any help would be greatly appriciated - maybe you can see something here that I dont??
You probably exceeded the size limits for attachments, I see that the file weighs 11MB and also includes DIV.
[Edited on 19-1-2018 by CicTec]
wonderfull, thank you CicTec! Ive spent at least two weeks on this bug now and its really annoying - I just want to work on the rest of the game and
get it released, since I think people are really likely to enjoy it
I'm analyzing your example, I think there are some mistakes, and some things are not clear:
1) lamp_off_roof_tex is set to 12, I think it should be set to 43 or am I wrong?
2) Opening the WLD file in the editor, I see that the texture of the lamp is set to 43 by default, this I think should be correct if the lamp is off
initially and the room environment must be dark, otherwise it should be 38.
3) If you temporarily replenish your lighting routine with the following (after changing lamp_off_roof_tex to 43):
Code:
Process anim_light(flickertype, lightnum);
Private
Lc;
Lc_limit;
orig_lc_limit;
rand_lc_val;
modify_sect_c;
modify_wall_c;
sectorsA_saved_lumos[50];
sectorsA_saved_floor_textures[50];
sectorsA_saved_roof_textures[50];
wallsA_saved_lumos[50];
wallsA_saved_textures[50];
floor_, roof_, luminosity_;
Begin
SWITCH (flickertype); // Set flicker/blink patterns
CASE 0:
orig_lc_limit=90;
END
CASE 1:
orig_lc_limit=150;
END
END
lc_limit=orig_lc_limit;
write_int(0, 30, 10, 3, &floor_);
write_int(0, 30, 20, 3, &roof_);
write_int(0, 30, 30, 3, &luminosity_);
Loop;
get_sector_texture(light_fx_data[lightnum].light_sector_A,
&floor_,
&roof_,
&luminosity_);
if (KEY(_T));
debug;
end
if(key(_1))
set_sector_texture(light_fx_data[lightnum].light_sector_A,
-1,
lamp_on_roof_tex,
light_fx_data[lightnum].light_sector_A_onlumo);
end
if(key(_2))
set_sector_texture(light_fx_data[lightnum].light_sector_A,
-1,
lamp_off_roof_tex,
light_fx_data[lightnum].light_sector_A_offlumo);
end
Frame;
End
End
You will notice that when the room is rendered initially it is as if it were on, but the lamp I think is off.
If you try to press keys 1 and 2, the lighting / texture should change correctly, or am I wrong?
Hi Cictec - sorry for the delay on getting back to you on this! yeah everything you said is correct, lamp_off_roof_tex should be set to 43. I changed
the roof texture of the lamp to 43 aswell. My apologies, all this attempts at fixing this thing has left me a little bit rattled and easily confused
:p
I've replenished the code on my end with the process that you posted - it does indeed work fine when pressing keys 1/2, and the roof/lumo variables do
update correctly...
Try the system first in the small example:
1) Set correctly all the initial textures and lights of the WLD environment (WLD file).
2) Make simple mode8 function calls by pressing the keys, to change the ambient lighting.
3) So try more complex code to debug error.
4) When everything works in the small example, bring the code to your game and try, so you can see if everything works ok, or if there are other
problems in the code of the game.
If you have any other problem or other, do not doubt in pointing it out.
to the light_fx_data bit just to signal when the list of walls and sectors has ended.
I then updated the anim_light process, however there is a strange glitch again, and it might be with set_sector_texture. (I have not tried
set_wall_texture yet, as I wanted to get the sector lighting working okay first!)
Now, when pressing 1, the light sector is set correctly as before, and the process then runs through a FROM loop to save the environmental info -
lumonisities, textures, etc. I checked using debug; and it DOES save the luminosities into sectorsA_saved_lumos[0 to 2] - all 3 slots are set to a
value of 5. There is then a FROM loop to set the sector textures to appear lit up. Then, when pressing 2, there is another FROM loop to set the
textures back to their original luminosities, floor textures & roof textures.
However, when trying this code, it's visible that they are not set to the same lumonisity as the light sector. I've even put a get_sector_texture for
sector 2 & a new set of write_ints in the code to double check (sector 2 is the sector that surrounds the light sector), and the program SAYS that
it's lumonsity is set to 5 - but it clearly isnt!
This keeps getting weirder and weirder, you really have to see it to believe it...
Code:
Process anim_light(flickertype, lightnum);
Private
Lc;
Lc_limit;
orig_lc_limit;
rand_lc_val;
sectorsA_saved_lumos[50];
sectorsA_saved_floor_textures[50];
sectorsA_saved_roof_textures[50];
wallsA_saved_lumos[50];
wallsA_saved_textures[50];
floor_, roof_, luminosity_;
sector2_floor_, sector2_roof_, sector2_luminosity_;
save_env_c;
set_env_c;
light_info_stored;
Begin
SWITCH (flickertype); // Set flicker/blink patterns
CASE 0:
orig_lc_limit=90;
END
CASE 1:
orig_lc_limit=150;
END
END
lc_limit=orig_lc_limit;
write_int(0, 30, 10, 3, &floor_);
write_int(0, 30, 20, 3, &roof_);
write_int(0, 30, 30, 3, &luminosity_);
write_int(0, 60, 10, 3, §or2_floor_);
write_int(0, 60, 20, 3, §or2_roof_);
write_int(0, 60, 30, 3, §or2_luminosity_);
Loop;
get_sector_texture(light_fx_data[lightnum].light_sector_A,
&floor_,
&roof_,
&luminosity_);
get_sector_texture(2,
§or2_floor_,
§or2_roof_,
§or2_luminosity_);
if (KEY(_T));
debug;
end
if (key(_1));
set_sector_texture(light_fx_data[lightnum].light_sector_A,
-1,
lamp_on_roof_tex,
light_fx_data[lightnum].light_sector_A_onlumo);
// SAVE env start
If (light_info_stored==0); // Only gets the info first time
FROM save_env_c = 0 to 49; // Sectors
If (light_fx_data[lightnum].sector_list_A[save_env_c]==-1);
light_info_stored=1; // So it doesnt try to save again
Break;
End
get_sector_texture(light_fx_data[lightnum].sector_list_A[save_env_c],
§orsA_saved_floor_textures[save_env_c],
§orsA_saved_roof_textures[save_env_c],
§orsA_saved_lumos[save_env_c]);
End
End
// SAVE env end
// SET env start
FROM set_env_c = 0 to 49;
If (light_fx_data[lightnum].sector_list_A[set_env_c]==-1);
Break;
End
if (light_fx_data[lightnum].modify_sectorstex_A==1);
set_sector_texture(light_fx_data[lightnum].sector_list_A[set_env_c],
light_fx_data[lightnum].modifyto_floortexture_sectors_A[set_env_c],
light_fx_data[lightnum].modifyto_rooftexture_sectors_A[set_env_c],
light_fx_data[lightnum].sector_lumo_A);
Else
set_sector_texture(light_fx_data[lightnum].sector_list_A[set_env_c],
-1,
-1,
light_fx_data[lightnum].sector_lumo_A);
End
End
// SET env end
end
if(key(_2) and light_info_stored==1)
set_sector_texture(light_fx_data[lightnum].light_sector_A,
-1,
lamp_off_roof_tex,
light_fx_data[lightnum].light_sector_A_offlumo);
FROM set_env_c = 0 to 49;
If (light_fx_data[lightnum].sector_list_A[set_env_c]==-1);
Break;
End
if (light_fx_data[lightnum].modify_sectorstex_A==1);
set_sector_texture(light_fx_data[lightnum].sector_list_A[set_env_c],
sectorsA_saved_floor_textures[set_env_c],
sectorsA_saved_roof_textures[set_env_c],
sectorsA_saved_lumos[set_env_c]);
Else
set_sector_texture(light_fx_data[lightnum].sector_list_A[set_env_c],
-1,
-1,
sectorsA_saved_lumos[set_env_c]);
End
End
end
Frame;
End
End
EDIT: I realized that sector2_ variables were not actually reading from sector 2 - have since modified that and found that the sector2_lumonisity is
being set to 10, not 5.
Yes, I think this system of lights has made you confuse a lot, in fact I was writing that the variables for sector 2 are always set on sector 5, in
fact by querying the correct sector, when you press 2 it indicates brightness 10 and not 5 as it should be, so some wrong value is passing to the
SET_SECTOR_TEXTURE function.
Do a simple direct setting of the brightness of sectors 2, 4, and 6 without using the structure, if everything works then SET_SECTOR_TEXTURE is OK, in
this case it could be some other bugs of your rutine or some DIV bugs in the use of arrays / structures to be verified.
sets sectors 2, 4 and 6 luminosity to a value of 10. But when you look in the Div Debugger, sectorsA_saved_lumos[0]=5, sectorsA_saved_lumos[1]=5 and
sectorsA_saved_lumos[2]=5. This is inside the From loop that is DEFINITELY going thru numbers 0 to 2. Wtf?!
Changing the values of sectorsA_saved_lumos[0 to 2] to 10 in the debugger FIXES the problem, everything lights up evenly, even tho on paper that makes
no sense at all.... :S
So it seems possible to bug in the use of arrays or debugger by DIV,
Print on the screen with simple write_int's the values of the array, using:
sectorsA_saved_lumos[set_env_c]
and
sectorsA_saved_lumos[0]
sectorsA_saved_lumos[1]
etc ...
To see if they actually contain the correct values or not, unfortunately now I do not have time to do these tests, if you can try you see where the
bugs are in the settings.
Try also to use SET_SECTOR_TEXTURE using constant values (5, 10, and so..) to see if it has a bug or not.
Top left stats are the original textures and luminosity, top right stats are sector 2 textures and luminosity.
Bottom left stats are, as stated, the sectors in light_fx_data[0].sector_list_A[0 to 2] and bottom right stats are sectorsA_saved_lumos[0 to 2].
I still really think its some kind of bug with DIV! can't see how this could be my code at this point
EDIT: Using set_sector_texture(light_fx_data[0].sector_list_A[0 to 2], -1, -1, 5); doesnt work either, it sets it to 10, just like if I were using
sectorsA_saved_lumos[0 to 2]. Maybe set_sector_texture doesnt like reading from arrays?
According to the DIV documentation on the SET_SECTOR_TEXTURE function about the luminosity param, it says:
Quote:
<luminosity> - luminosity of the texture. from 0 (ambience colour, wich is normally black) up to 15
(texture with the original colours). IF a -1 is indicated. the current level of luminosity in the sector will remain unchanged.
So if we set it to 15, we have the original colors of the texture, if it is 0, it will be equal to the color of the environment, otherwise blending
values between the color texture and color environment.
If you open your WLD, you will see that the initial luminosity value is set to 10 (no is displayed in the editor, only you see the luminosity level of
the texture compared to the original colors), however, when we try to retrieve the value with GET_SECTOR_TEXTURE, it returns 5, so when trying to
restore the saved original value, obviously the luminosity is wrong.
The problem is ultimately a bug in the GET_SECTOR_TEXTURE function, because the VPE needs to keep the luminosity value as opposed to what we indicate
with the SET function, however the GET function does not re-convert this value, just returns that used by VPE, not the one used by us according to the
documentation.
Where it clearly shows that SET_SECTOR_TEXTURE works well.
I've fixed GET_SECTOR_TEXTURE and now your algorithm works fine
For the moment do not use the GET function, save the original luminosiity values of the WLD in an array and use it to restore when necessary, until a
new build of DIV with the fix is available.
FanTASTIC! I'm so glad you dedicated the time to helping out with this, Cictec - I really wanted to make sure that we worked out what the bug in Div
was so it can be fixed in future versions
I'm using the workaround from your second reply (the lumo=15-lumo fix) and I can see how that works, and the program now works perfectly. I've got the
perfected code here in case anyone wants to try it out for themselves - thanks so much for your help :D I'll include you in the final game credits.
Code:
Process anim_light(flickertype, lightnum);
Private
Lc;
Lc_limit;
orig_lc_limit;
rand_lc_val;
sectorsA_saved_lumos[50];
sectorsA_saved_floor_textures[50];
sectorsA_saved_roof_textures[50];
wallsA_saved_lumos[50];
wallsA_saved_textures[50];
save_env_c;
set_env_c;
set_defaults;
LUMO_BUG_WORKAROUND=15;
sector_light_info_stored;
wall_light_info_stored;
Begin
SWITCH (flickertype); // Set flicker/blink patterns
CASE 0:
orig_lc_limit=90;
END
CASE 1:
orig_lc_limit=150;
END
END
lc_limit=orig_lc_limit;
// Workaround for undeclared textures (if modifying wall/sector textures)
// This sets the left over texture variables to -1 so they arent set to 0
if (light_fx_data[lightnum].modify_wallstex_A==1);
From set_defaults=0 to 49;
if (light_fx_data[lightnum].modifyto_texture_wall_A[set_defaults]==0);
light_fx_data[lightnum].modifyto_texture_wall_A[set_defaults]=-1;
End
End
End
if (light_fx_data[lightnum].modify_sectorstex_A==1);
From set_defaults=0 to 49;
if (light_fx_data[lightnum].modifyto_floortexture_sectors_A[set_defaults]==0);
light_fx_data[lightnum].modifyto_floortexture_sectors_A[set_defaults]=-1;
End
if (light_fx_data[lightnum].modifyto_rooftexture_sectors_A[set_defaults]==0);
light_fx_data[lightnum].modifyto_rooftexture_sectors_A[set_defaults]=-1;
End
End
End
Loop;
if (KEY(_I));
debug;
end
if (key(_1));
set_sector_texture(light_fx_data[lightnum].light_sector_A,
-1,
lamp_on_roof_tex,
light_fx_data[lightnum].light_sector_A_onlumo);
// SAVE env start
If (sector_light_info_stored==0); // Only gets the info first time
FROM save_env_c = 0 to 49; // Sectors
If (light_fx_data[lightnum].sector_list_A[save_env_c]==-1);
sector_light_info_stored=1; // So it doesnt try to save again
Break;
End
get_sector_texture(light_fx_data[lightnum].sector_list_A[save_env_c],
§orsA_saved_floor_textures[save_env_c],
§orsA_saved_roof_textures[save_env_c],
§orsA_saved_lumos[save_env_c]);
sectorsA_saved_lumos[save_env_c]=LUMO_BUG_WORKAROUND-sectorsA_saved_lumos[save_env_c];
End
End
If (wall_light_info_stored==0); // Only gets the info first time
FROM save_env_c = 0 to 49; // Walls
If (light_fx_data[lightnum].wall_list_A[save_env_c]==-1);
wall_light_info_stored=1; // So it doesnt try to save again
Break;
End
get_wall_texture(light_fx_data[lightnum].wall_list_A[save_env_c],
&wallsA_saved_textures[save_env_c],
&wallsA_saved_lumos[save_env_c]);
wallsA_saved_lumos[save_env_c]=LUMO_BUG_WORKAROUND-wallsA_saved_lumos[save_env_c];
End
End
// SAVE env end
// SET env start
FROM set_env_c = 0 to 49; // Sectors
If (light_fx_data[lightnum].sector_list_A[set_env_c]==-1);
Break;
End
if (light_fx_data[lightnum].modify_sectorstex_A==1);
set_sector_texture(light_fx_data[lightnum].sector_list_A[set_env_c],
light_fx_data[lightnum].modifyto_floortexture_sectors_A[set_env_c],
light_fx_data[lightnum].modifyto_rooftexture_sectors_A[set_env_c],
light_fx_data[lightnum].sector_lumo_A);
Else
set_sector_texture(light_fx_data[lightnum].sector_list_A[set_env_c],
-1,
-1,
light_fx_data[lightnum].sector_lumo_A);
End
End
FROM set_env_c = 0 to 49; // Walls
If (light_fx_data[lightnum].wall_list_A[set_env_c]==-1);
Break;
End
if (light_fx_data[lightnum].modify_wallstex_A==1);
set_wall_texture(light_fx_data[lightnum].wall_list_A[set_env_c],
light_fx_data[lightnum].modifyto_texture_wall_A[set_env_c],
light_fx_data[lightnum].wall_lumo_A);
Else
set_wall_texture(light_fx_data[lightnum].wall_list_A[set_env_c],
-1,
light_fx_data[lightnum].wall_lumo_A);
End
End
// SET env end
end
if(key(_2) and sector_light_info_stored==1 and wall_light_info_stored==1);
set_sector_texture(light_fx_data[lightnum].light_sector_A,
-1,
lamp_off_roof_tex,
light_fx_data[lightnum].light_sector_A_offlumo);
FROM set_env_c = 0 to 49; // Sectors
If (light_fx_data[lightnum].sector_list_A[set_env_c]==-1);
Break;
End
if (light_fx_data[lightnum].modify_sectorstex_A==1);
set_sector_texture(light_fx_data[lightnum].sector_list_A[set_env_c],
sectorsA_saved_floor_textures[set_env_c],
sectorsA_saved_roof_textures[set_env_c],
sectorsA_saved_lumos[set_env_c]);
Else
set_sector_texture(light_fx_data[lightnum].sector_list_A[set_env_c],
-1,
-1,
sectorsA_saved_lumos[set_env_c]);
End
End
FROM set_env_c = 0 to 49; // Walls
If (light_fx_data[lightnum].wall_list_A[set_env_c]==-1);
Break;
End
if (light_fx_data[lightnum].modify_wallstex_A==1);
set_wall_texture(light_fx_data[lightnum].wall_list_A[set_env_c],
wallsA_saved_textures[set_env_c],
wallsA_saved_lumos[set_env_c]);
Else
set_wall_texture(light_fx_data[lightnum].wall_list_A[set_env_c],
-1,
wallsA_saved_lumos[set_env_c]);
End
End
end
Frame;
End
End
As a further note, I am seeing that GET_WALL_TEXTURE has the same bug and SET_WALL_TEXTURE does not leave the luminosity unchanged if you pass the -1
value to the corresponding parameter, this is the same bug you notified me to SET_SECTOR_TEXTURE.
I've also fixed these functions now. If you use them in your project, for GET_WALL_TEXTURE you can use the workaround described above, if you need to
use SET_WALL_TEXTURE with parameter -1, you must save the original value of brightness in some variable or constant then use these to restore
everything.
Cictec can you submit a pull request for this fix please (name it fixes/mode8_sectors as a branch and then submit a pull request only of that branch)
Also I am trying to catch up on the older pull requests and would like to merge both John's translation patches and your own fixes into the system and
then see about doing a serious refactor of the code.
Cictec can you submit a pull request for this fix please (name it fixes/mode8_sectors as a branch and then submit a pull request only of that branch)
Currently I am in Linux and I have not had time to install a proper GIT system that allows me to perform a pull request or other in an appropriate
manner, also my fork-repository is not updated with the fix, they are only locally.
I'll send you the fixes tomorrow anyway, it's just a modified file, but first you should merge my last pull-request before add it to official
repository, if you encounter problems, delete my pull-request and I'll pass you the complete code I have here of DIV (I've already make a build of DIV
here on Ubuntu Linux and it works correctly, you can perform further tests on your OS for safety).
and then see about doing a serious refactor of the code.
If this relates to what we discussed at the last meeting, it seems to me excellent news, maybe we should organize another to continue discussing this.
If you refer instead to this current version of DIV, my suggestion is to perform only a bug-fix where possible, and maybe formatting of code and
translation from spanish to english, then leave it more like a DIV2Modern for historical and affective reasons (also because the current structure of
the basic code does not provide easy possibilities to add new features), so devote all your efforts and free time that you can apply to the project to
a complete rewrite for the real version of DIV3, you'll have less problems this way.