mirror of
https://github.com/mwpenny/portal64-still-alive.git
synced 2024-10-20 10:37:37 -04:00
Merge pull request #66 from westonCoder/signage_flickering
Flickering Signage Addition
This commit is contained in:
commit
b9e9a0d69c
1
Makefile
1
Makefile
|
@ -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 \
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
-alpha remove -crop 50x50+21+20 -resize 16x16
|
|
@ -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
|
||||
|
|
BIN
assets/models/props/signage_off.blend
Normal file
BIN
assets/models/props/signage_off.blend
Normal file
Binary file not shown.
1
assets/models/props/signage_off.flags
Normal file
1
assets/models/props/signage_off.flags
Normal file
|
@ -0,0 +1 @@
|
|||
-r 90,0,0 -m assets/materials/static.skm.yaml -m assets/materials/elevator.skm.yaml --default-material default --boneless
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@ struct Signage {
|
|||
struct Transform transform;
|
||||
short roomIndex;
|
||||
short testChamberNumber;
|
||||
float flickerChance;
|
||||
};
|
||||
|
||||
void signageInit(struct Signage* signage, struct SignageDefinition* definition);
|
||||
|
|
Loading…
Reference in a new issue