Merge pull request #66 from westonCoder/signage_flickering

Flickering Signage Addition
This commit is contained in:
lambertjamesd 2023-03-13 20:28:28 -06:00 committed by GitHub
commit b9e9a0d69c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 68 additions and 23 deletions

View file

@ -175,6 +175,7 @@ MODEL_LIST = assets/models/cube/cube.blend \
assets/models/props/round_elevator_interior.blend \
assets/models/props/round_elevator_collision.blend \
assets/models/props/signage.blend \
assets/models/props/signage_off.blend \
assets/models/props/switch001.blend \
assets/models/props/box_dropper.blend \
assets/models/props/box_dropper_glass.blend \

View file

@ -110,9 +110,9 @@ Where `/home/james/Blender/blender-2.93.1-linux-x64` is the folder where Blender
- [ ] Correct elevator timing
- [ ] Elevator and door sounds
- [ ] Presort portal gun polygon order
- [ ] Signage should not always be on
- [ ] Camera shake
- [?] Skips audio sometimes
- [x] Signage should not always be on
- [x] sound effects for ball (portal_pak_dir/scripts/npc_sounds_energy_ball.txt)
- [x] first portal wall
- [x] the cube bounces the player

View file

@ -0,0 +1 @@
-alpha remove -crop 50x50+21+20 -resize 16x16

View file

@ -407,6 +407,22 @@ materials:
gDPSetCombineMode:
color: ["SHADE", "0", "TEXEL0", "0"]
newsignage_back00:
gDPSetTile:
filename: ../../portal_pak_modified/materials/models/props_animsigns/newsignage_back00.png
siz: G_IM_SIZ_4b
twoTone: true
s:
wrap: false
t:
wrap: false
gDPSetRenderMode: G_RM_ZB_OPA_SURF
gSPGeometryMode:
clear: [G_LIGHTING]
gDPSetCycleType: G_CYC_1CYCLE
newsignage_back02:
gDPSetTile:
filename: ../../portal_pak_modified/materials/models/props_animsigns/newsignage_back02.png

Binary file not shown.

View file

@ -0,0 +1 @@
-r 90,0,0 -m assets/materials/static.skm.yaml -m assets/materials/elevator.skm.yaml --default-material default --boneless

View file

@ -6,9 +6,13 @@
#include "../graphics/color.h"
#include "../build/assets/models/props/signage.h"
#include "../build/assets/models/props/signage_off.h"
#include "../build/assets/models/props/cylinder_test.h"
#include "../../build/assets/materials/static.h"
#include <stdlib.h>
int gCurrentSignageIndex = -1;
void signageSetLargeDigit(Vtx* vertices, int nextDigit, int currentDigit) {
@ -84,40 +88,44 @@ void signageSetWarnings(int warningMask) {
((Vtx*)K0_TO_K1(gWarningVertices[i]))[vIndex].v.cn[1] = useColor.g;
((Vtx*)K0_TO_K1(gWarningVertices[i]))[vIndex].v.cn[2] = useColor.b;
((Vtx*)K0_TO_K1(gWarningVertices[i]))[vIndex].v.cn[3] = useColor.a;
}
}
}
void signageCheckIndex(int neededIndex) {
if (gCurrentSignageIndex == neededIndex) {
return;
}
if (gCurrentSignageIndex == neededIndex) {
return;
}
if (gCurrentSignageIndex == -1) {
gCurrentSignageIndex = 0;
}
if (gCurrentSignageIndex == -1) {
gCurrentSignageIndex = 0;
}
int prevTenDigit = gCurrentSignageIndex / 10;
int prevOneDigit = gCurrentSignageIndex - prevTenDigit * 10;
int prevTenDigit = gCurrentSignageIndex / 10;
int prevOneDigit = gCurrentSignageIndex - prevTenDigit * 10;
int tenDigit = neededIndex / 10;
int oneDigit = neededIndex - tenDigit * 10;
gCurrentSignageIndex = neededIndex;
int tenDigit = neededIndex / 10;
int oneDigit = neededIndex - tenDigit * 10;
gCurrentSignageIndex = neededIndex;
signageSetLargeDigit(props_signage_signage_num00_digit_0_color, oneDigit, prevOneDigit);
signageSetLargeDigit(props_signage_signage_num00_digit_10_color, tenDigit, prevTenDigit);
signageSetSmallDigit(props_signage_signage_num00_sdigit_0_color, oneDigit, prevOneDigit);
signageSetSmallDigit(props_signage_signage_num00_sdigit_10_color, tenDigit, prevTenDigit);
signageSetLargeDigit(props_signage_signage_num00_digit_0_color, oneDigit, prevOneDigit);
signageSetLargeDigit(props_signage_signage_num00_digit_10_color, tenDigit, prevTenDigit);
signageSetSmallDigit(props_signage_signage_num00_sdigit_0_color, oneDigit, prevOneDigit);
signageSetSmallDigit(props_signage_signage_num00_sdigit_10_color, tenDigit, prevTenDigit);
signageSetWarnings(gLevelWarnings[neededIndex]);
signageSetWarnings(gLevelWarnings[neededIndex]);
}
void signageRender(void* data, struct DynamicRenderDataList* renderList, struct RenderState* renderState) {
struct Signage* signage = (struct Signage*)data;
signageCheckIndex(signage->testChamberNumber);
float n = ((float)rand()/RAND_MAX)*(float)(1.0);
int signOn = 1;
if (n <= signage->flickerChance){signOn = 0;}
if (signage->flickerChance > 0.0001){signage->flickerChance = signage->flickerChance*0.97;}
if (signOn){signageCheckIndex(signage->testChamberNumber);}
Mtx* matrix = renderStateRequestMatrices(renderState, 1);
@ -127,14 +135,30 @@ void signageRender(void* data, struct DynamicRenderDataList* renderList, struct
transformToMatrixL(&signage->transform, matrix, SCENE_SCALE);
dynamicRenderListAddData(
if (signOn){
dynamicRenderListAddData(
renderList,
props_signage_model_gfx,
matrix,
DEFAULT_INDEX,
&signage->transform.position,
NULL
);
);
}
else{
dynamicRenderListAddData(
renderList,
props_signage_off_model_gfx,
matrix,
DEFAULT_INDEX,
&signage->transform.position,
NULL
);
}
}
void signageInit(struct Signage* signage, struct SignageDefinition* definition) {
@ -143,6 +167,7 @@ void signageInit(struct Signage* signage, struct SignageDefinition* definition)
signage->transform.scale = gOneVec;
signage->roomIndex = definition->roomIndex;
signage->testChamberNumber = definition->testChamberNumber;
signage->flickerChance = 1.0;
int dynamicId = dynamicSceneAdd(signage, signageRender, &signage->transform.position, 1.7f);

View file

@ -8,6 +8,7 @@ struct Signage {
struct Transform transform;
short roomIndex;
short testChamberNumber;
float flickerChance;
};
void signageInit(struct Signage* signage, struct SignageDefinition* definition);