Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
background.c File Reference

Go to the source code of this file.

Functions

void load_map_bg (char *optAssetName)
 
void reset_background_settings (void)
 
void set_background (BackgroundHeader *bg)
 
void set_background_size (s16 startX, s16 startY, s16 sizeX, s16 sizeY)
 
u16 blend_background_channel (u16 arg0, s32 arg1, s32 alpha)
 
void appendGfx_background_texture (void)
 
void enable_background_wave (void)
 
void disable_background_wave (void)
 

Variables

char gCloudyFlowerFieldsBg [] = "fla_bg"
 
char gSunnyFlowerFieldsBg [] = "flb_bg"
 
s8 gBackroundWaveEnabled = false
 
s16 gBackroundTextureYOffset = 0
 
f32 gBackroundWavePhase = 0.0f
 
BSS PAL_BIN gBackgroundPalette [256]
 
BSS f32 gBackroundLastScrollValue
 

Function Documentation

◆ load_map_bg()

void load_map_bg ( char * optAssetName)

Definition at line 14 of file background.c.

14 {
15 if (optAssetName != nullptr) {
18 char* assetName = optAssetName;
19
21 // Use sunny Flower Fields bg rather than cloudy
24 }
25 }
26
30 }
31}
BSS s32 PopupMenu_SelectedIndex
char gCloudyFlowerFieldsBg[]
Definition background.c:5
char gSunnyFlowerFieldsBg[]
Definition background.c:6
@ STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE
Definition enums.h:191
s32 evt_get_variable(Evt *script, Bytecode var)
Definition evt.c:1730
void * load_asset_by_name(const char *assetName, u32 *decompressedSize)
Definition world.c:251
s32 general_heap_free(void *data)
Definition heap.c:18
void decode_yay0(void *src, void *dst)
@ GB_StoryProgress
#define UNK_PTR
Definition types.h:7
BackgroundHeader gBackgroundImage

Referenced by load_map_by_IDs(), load_stage_assets(), state_init_title_screen(), state_step_end_battle(), and state_step_unpause().

◆ reset_background_settings()

◆ set_background()

void set_background ( BackgroundHeader * bg)

◆ set_background_size()

void set_background_size ( s16 startX,
s16 startY,
s16 sizeX,
s16 sizeY )

◆ blend_background_channel()

u16 blend_background_channel ( u16 arg0,
s32 arg1,
s32 alpha )

Definition at line 58 of file background.c.

58 {
59 return arg0 + (arg1 - arg0) * alpha / 256;
60}

Referenced by appendGfx_background_texture().

◆ appendGfx_background_texture()

void appendGfx_background_texture ( void )
Bug
xh = 2 * bgXOffset + (bgMinX - 1) * 4
Bug
xh = 2 * bgXOffset + (bgMinX - 1) * 4

Definition at line 62 of file background.c.

62 {
64 u16 flags = 0;
66 u8 r1, g1, b1, a1;
67 u8 r2, g2, b2;
69 s32 i;
70
72
73 s32 bgMinX;
74 s32 bgMinY;
75 s32 bgMaxX;
76 s32 bgMaxY;
78 s32 numLines;
80
82 s16 texOffsetY;
83
84
85 enum {
86 BG_BLEND_NONE = 0,
90 };
91
96 }
97
98 switch (*gBackgroundTintModePtr) {
99 case ENV_TINT_NONE:
100 case ENV_TINT_SHROUD:
102 if (a1 != 0) {
104 }
105 break;
106 case ENV_TINT_DEPTH:
107 case ENV_TINT_REMAP:
108 default:
110 if (!(r1 == 255 && g1 == 255 && b1 == 255 && r2 == 0 && g2 == 0 && b2 == 0)) {
112 }
113 break;
114 }
115
116 switch (flags) {
117 case BG_BLEND_NONE:
119 break;
120 case BG_BLEND_HAS_FOG:
122 break;
125 fogR = r1;
126 fogG = g1;
127 fogB = b1;
128 fogA = a1;
129 break;
132 fogR = (fogR * (255 - a1) + r1 * a1) / 255;
133 fogG = (fogG * (255 - a1) + g1 * a1) / 255;
134 fogB = (fogB * (255 - a1) + b1 * a1) / 255;
135 fogA = (fogA * (255 - a1) + a1 * a1) / 255;
136 break;
139 break;
140 }
141
143 switch (*gBackgroundTintModePtr) {
144 case ENV_TINT_NONE:
145 case ENV_TINT_SHROUD:
146 if (fogA == 255) {
147 for (i = 0; i < ARRAY_COUNT(gBackgroundPalette); i++) {
148 gBackgroundPalette[i] = 1;
149 }
150 } else {
151 // lerp from background palette color to fog color based on fog alpha
152 for (i = 0; i < ARRAY_COUNT(gBackgroundPalette); i++) {
153 // NOTE: values after UNPACK range from [0,31], so we need to shift fog color into that range
158 gBackgroundPalette[i] = blendedB << 1 | blendedG << 6 | blendedR << 11 | 1;
159 }
160 }
161 break;
162 case ENV_TINT_DEPTH:
163 case ENV_TINT_REMAP:
164 default:
165 // the background color channels are remapped from [0,255] -> [min,max]
166 for (i = 0; i < ARRAY_COUNT(gBackgroundPalette); i++) {
167 // NOTE: values after UNPACK range from [0,31], so we need to shift other colors into that range
169 blendedB = (b2 >> 3) + ((UNPACK_PAL_B(palColor) * b1 >> 3) >> 5);
170 blendedG = (g2 >> 3) + ((UNPACK_PAL_G(palColor) * g1 >> 3) >> 5);
171 blendedR = (r2 >> 3) + ((UNPACK_PAL_R(palColor) * r1 >> 3) >> 5);
172
173 if (blendedB > 0x1F) {
174 blendedB = 0x1F;
175 }
176 if (blendedG > 0x1F) {
177 blendedG = 0x1F;
178 }
179 if (blendedR > 0x1F) {
180 blendedR = 0x1F;
181 }
182 gBackgroundPalette[i] = blendedB << 1 | blendedG << 6 | blendedR << 11 | 1;
183 }
184 break;
185 }
186 }
187
188 theta = clamp_angle(-cam->curBoomYaw);
191 f5 = cosTheta * cam->lookAt_obj.x - sinTheta * cam->lookAt_obj.z + cam->leadAmount;
192 scrollValue = -f5 * 0.25f;
194
197 } else {
199 }
200
201 while (scrollValue < 0.0f) {
203 }
204
210
219
222 } else {
224 }
225
230 for (i = 0; i < numLines; i++) {
231 texOffsetY = gBackroundTextureYOffset + lineHeight * i;
232 if (texOffsetY > gGameStatusPtr->backgroundMaxY) {
233 texOffsetY -= gGameStatusPtr->backgroundMaxY;
234 }
237 0, 0, 295, 5, 0,
239
241 (bgXOffset + bgMinX - 1) * 4, (lineHeight * i + lineHeight - 1 + bgMinY) * 4,
242 G_TX_RENDERTILE, (bgMaxX - bgXOffset) * 32, 0, 4096, 1024);
244 (bgMaxX + bgMinX - 1) * 4, (lineHeight * i + lineHeight - 1 + bgMinY) * 4,
245 G_TX_RENDERTILE, 0, 0, 4096, 1024);
246 }
247 if (extraHeight != 0) {
248 texOffsetY = gBackroundTextureYOffset + lineHeight * i;
249 if (texOffsetY > gGameStatusPtr->backgroundMaxY) {
250 texOffsetY -= gGameStatusPtr->backgroundMaxY;
251 }
254 0, 0, 295, extraHeight - 1, 0,
257 (bgXOffset + bgMinX - 1) * 4, (bgMaxY - 1 + bgMinY) * 4,
258 G_TX_RENDERTILE, (bgMaxX - bgXOffset) * 32, 0, 4096, 1024);
260 (bgMaxX + bgMinX - 1) * 4, (bgMaxY - 1 + bgMinY) * 4,
261 G_TX_RENDERTILE, 0, 0, 4096, 1024);
262 }
263 } else {
264 lineHeight = 6;
267 gBackroundWavePhase += TAU / 60; // 60 frames period
268 for (i = 0; i < numLines; i++) {
269 waveOffset = sin_rad(gBackroundWavePhase + i * (TAU / 15)) * 3.0f;
271 texOffsetY = gBackroundTextureYOffset + lineHeight * i;
272 if (texOffsetY > gGameStatusPtr->backgroundMaxY) {
273 texOffsetY -= gGameStatusPtr->backgroundMaxY;
274 }
277 0, 0, 295, 5, 0,
279
281 (2 * bgXOffset + (bgMinX - 1)) * 4, (lineHeight * i + lineHeight - 1 + bgMinY) * 4,
282 G_TX_RENDERTILE, bgMaxX * 32 - bgXOffset * 16, 0, 4096, 1024);
284 (bgMaxX + bgMinX - 1) * 4, (lineHeight * i + lineHeight - 1 + bgMinY) * 4,
285 G_TX_RENDERTILE, 0, 0, 4096, 1024);
286 }
287 if (extraHeight != 0) {
288 waveOffset = sin_rad(gBackroundWavePhase + i * (TAU / 15)) * 3.0f;
290 texOffsetY = gBackroundTextureYOffset + lineHeight * i;
291 if (texOffsetY > gGameStatusPtr->backgroundMaxY) {
292 texOffsetY -= gGameStatusPtr->backgroundMaxY;
293 }
296 0, 0, 295, extraHeight - 1, 0,
299 (2 * bgXOffset + (bgMinX - 1)) * 4, (bgMaxY - 1 + bgMinY) * 4,
300 G_TX_RENDERTILE, bgMaxX * 32 - bgXOffset * 16, 0, 4096, 1024);
302 (bgMaxX + bgMinX - 1) * 4, (bgMaxY - 1 + bgMinY) * 4,
303 G_TX_RENDERTILE, 0, 0, 4096, 1024);
304 }
305 }
306}
s16 gBackroundTextureYOffset
Definition background.c:8
u16 blend_background_channel(u16 arg0, s32 arg1, s32 alpha)
Definition background.c:58
BSS PAL_BIN gBackgroundPalette[256]
Definition background.c:11
f32 gBackroundWavePhase
Definition background.c:9
s8 flags
Definition demo_api.c:15
#define sin_deg
#define clamp_angle
#define cos_deg
#define mdl_get_shroud_tint_params
@ BACKGROUND_FLAG_FOG
Definition enums.h:5871
@ ENV_TINT_SHROUD
Definition enums.h:3972
@ ENV_TINT_DEPTH
Definition enums.h:3974
@ ENV_TINT_REMAP
Definition enums.h:3978
@ ENV_TINT_NONE
Definition enums.h:3970
f32 fabsf(f32 f)
s32 is_world_fog_enabled(void)
Definition model.c:3792
void get_world_fog_color(s32 *r, s32 *g, s32 *b, s32 *a)
Definition model.c:3801
f32 sin_rad(f32 x)
Definition 43F0.c:713
void mdl_get_remap_tint_params(u8 *primR, u8 *primG, u8 *primB, u8 *envR, u8 *envG, u8 *envB)
Definition model.c:3950
#define UNPACK_PAL_B(color)
Definition macros.h:280
#define UNPACK_PAL_R(color)
Definition macros.h:278
#define TAU
Definition macros.h:139
#define ARRAY_COUNT(arr)
Definition macros.h:39
#define UNPACK_PAL_G(color)
Definition macros.h:279
Camera gCameras[4]
Definition cam_main.c:16
Gfx * gMainGfxPos
Definition cam_main.c:14
u8 * gBackgroundTintModePtr
Definition model.c:105
s32 gCurrentCameraID
Definition cam_math.c:5

Referenced by gfx_draw_background().

◆ enable_background_wave()

void enable_background_wave ( void )

Definition at line 308 of file background.c.

308 {
310}

Referenced by EnableBackgroundWave().

◆ disable_background_wave()

void disable_background_wave ( void )

Definition at line 312 of file background.c.

312 {
313 gBackroundWaveEnabled = false;
314}

Variable Documentation

◆ gCloudyFlowerFieldsBg

char gCloudyFlowerFieldsBg[] = "fla_bg"

Definition at line 5 of file background.c.

Referenced by load_map_bg().

◆ gSunnyFlowerFieldsBg

char gSunnyFlowerFieldsBg[] = "flb_bg"

Definition at line 6 of file background.c.

Referenced by load_map_bg().

◆ gBackroundWaveEnabled

◆ gBackroundTextureYOffset

s16 gBackroundTextureYOffset = 0

Definition at line 8 of file background.c.

Referenced by appendGfx_background_texture().

◆ gBackroundWavePhase

f32 gBackroundWavePhase = 0.0f

Definition at line 9 of file background.c.

Referenced by appendGfx_background_texture().

◆ gBackgroundPalette

BSS PAL_BIN gBackgroundPalette[256]

Definition at line 11 of file background.c.

Referenced by appendGfx_background_texture().

◆ gBackroundLastScrollValue

BSS f32 gBackroundLastScrollValue

Definition at line 12 of file background.c.

Referenced by appendGfx_background_texture(), and reset_background_settings().