mirror of
https://github.com/mwpenny/portal64-still-alive.git
synced 2024-10-19 22:27:36 -04:00
Implement triple sign state
This commit is contained in:
parent
b8304fc8f4
commit
20e9beaa0f
1
Makefile
1
Makefile
|
@ -254,7 +254,6 @@ MODEL_LIST = assets/models/player/chell.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/portal/portal_blue.blend \
|
||||
assets/models/portal/portal_blue_filled.blend \
|
||||
assets/models/portal/portal_blue_face.blend \
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
-alpha remove -crop 50x50+21+20 -resize 16x16
|
|
@ -555,14 +555,16 @@ materials:
|
|||
newsignage_back00:
|
||||
gDPSetTile:
|
||||
filename: ../../portal_pak_modified/materials/models/props_animsigns/newsignage_back00.png
|
||||
siz: G_IM_SIZ_4b
|
||||
twoTone: true
|
||||
siz: G_IM_SIZ_8b
|
||||
fmt: G_IM_FMT_I
|
||||
s:
|
||||
wrap: false
|
||||
t:
|
||||
wrap: false
|
||||
|
||||
gDPSetRenderMode: G_RM_ZB_OPA_SURF
|
||||
gDPSetCombineMode:
|
||||
color: ["TEXEL0", "0", "PRIMITIVE", "0"]
|
||||
|
||||
gSPGeometryMode:
|
||||
clear: [G_LIGHTING]
|
||||
|
@ -571,14 +573,15 @@ materials:
|
|||
newsignage_back02:
|
||||
gDPSetTile:
|
||||
filename: ../../portal_pak_modified/materials/models/props_animsigns/newsignage_back02.png
|
||||
siz: G_IM_SIZ_4b
|
||||
twoTone: true
|
||||
siz: G_IM_SIZ_8b
|
||||
fmt: G_IM_FMT_I
|
||||
s:
|
||||
wrap: false
|
||||
t:
|
||||
wrap: false
|
||||
|
||||
gDPSetRenderMode: G_RM_ZB_OPA_SURF
|
||||
gDPSetCombineMode:
|
||||
color: ["TEXEL0", "0", "PRIMITIVE_ALPHA", "0"]
|
||||
|
||||
gSPGeometryMode:
|
||||
clear: [G_LIGHTING]
|
||||
|
@ -597,10 +600,12 @@ materials:
|
|||
set: [G_SHADE]
|
||||
gDPSetCombineMode:
|
||||
color: [SHADE, PRIMITIVE, TEXEL0, PRIMITIVE]
|
||||
gDPSetPrimColor:
|
||||
r: 242
|
||||
g: 245
|
||||
b: 247
|
||||
gDPSetCycleType: G_CYC_1CYCLE
|
||||
|
||||
signage_dark_lcd:
|
||||
gDPSetRenderMode: G_RM_ZB_OPA_DECAL
|
||||
gDPSetCombineMode:
|
||||
color: ["0", "0", "0", ENVIRONMENT]
|
||||
gDPSetCycleType: G_CYC_1CYCLE
|
||||
|
||||
awe_total_copy_0:
|
||||
|
@ -608,18 +613,17 @@ materials:
|
|||
filename: ../../portal_pak_modified/materials/models/props_animsigns/awe_total_copy_0.png
|
||||
siz: G_IM_SIZ_4b
|
||||
fmt: G_IM_FMT_I
|
||||
s:
|
||||
wrap: false
|
||||
t:
|
||||
wrap: false
|
||||
|
||||
gDPSetRenderMode: G_RM_ZB_OPA_DECAL
|
||||
|
||||
gSPGeometryMode:
|
||||
clear: [G_LIGHTING]
|
||||
set: [G_SHADE]
|
||||
gDPSetCombineMode:
|
||||
color: [SHADE, PRIMITIVE, TEXEL0, PRIMITIVE]
|
||||
gDPSetPrimColor:
|
||||
r: 242
|
||||
g: 245
|
||||
b: 247
|
||||
color: ["ENVIRONMENT", PRIMITIVE, TEXEL0, PRIMITIVE]
|
||||
gDPSetCycleType: G_CYC_1CYCLE
|
||||
|
||||
awe_total_copy_1:
|
||||
|
@ -632,13 +636,8 @@ materials:
|
|||
|
||||
gSPGeometryMode:
|
||||
clear: [G_LIGHTING]
|
||||
set: [G_SHADE]
|
||||
gDPSetCombineMode:
|
||||
color: [SHADE, PRIMITIVE, TEXEL0, PRIMITIVE]
|
||||
gDPSetPrimColor:
|
||||
r: 242
|
||||
g: 245
|
||||
b: 247
|
||||
color: ["ENVIRONMENT", PRIMITIVE, TEXEL0, PRIMITIVE]
|
||||
gDPSetCycleType: G_CYC_1CYCLE
|
||||
|
||||
awe_total_copy_2:
|
||||
|
@ -654,10 +653,6 @@ materials:
|
|||
set: [G_SHADE]
|
||||
gDPSetCombineMode:
|
||||
color: [SHADE, PRIMITIVE, TEXEL0, PRIMITIVE]
|
||||
gDPSetPrimColor:
|
||||
r: 242
|
||||
g: 245
|
||||
b: 247
|
||||
gDPSetCycleType: G_CYC_1CYCLE
|
||||
|
||||
vertex_color:
|
||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -1 +0,0 @@
|
|||
-r 90,0,0 -m assets/materials/static.skm.yaml -m assets/materials/elevator.skm.yaml --default-material default --boneless
|
|
@ -4,16 +4,23 @@
|
|||
#include "../levels/levels.h"
|
||||
#include "../defs.h"
|
||||
#include "../graphics/color.h"
|
||||
#include "../util/time.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;
|
||||
short gCurrentSignageIndex = -1;
|
||||
short gCurrentSignageOn = 0;
|
||||
|
||||
enum SignState {
|
||||
SignStateOff,
|
||||
SignStateUnlit,
|
||||
SignStateLit,
|
||||
};
|
||||
|
||||
void signageSetLargeDigit(Vtx* vertices, int nextDigit, int currentDigit) {
|
||||
int uOffset = (nextDigit - currentDigit) * (14 << 5);
|
||||
|
@ -80,25 +87,35 @@ short gLevelWarnings[] = {
|
|||
};
|
||||
|
||||
static struct Coloru8 gSignageOnColor = {0, 0, 0, 255};
|
||||
static struct Coloru8 gSignageOffColor = {212, 212, 212, 255};
|
||||
static struct Coloru8 gSignageDisabledColor = {212, 212, 212, 255};
|
||||
static struct Coloru8 gSignageDisabledUnlitColor = {40, 40, 40, 255};
|
||||
static struct Coloru8 gSignageOffColor = {46, 47, 49, 255};
|
||||
|
||||
void signageSetWarnings(int warningMask) {
|
||||
void signageSetWarnings(int warningMask, enum SignState signState) {
|
||||
for (int i = 0; i < 10; ++i) {
|
||||
struct Coloru8 useColor = ((1 << i) & warningMask) ? gSignageOnColor : gSignageOffColor;
|
||||
struct Coloru8 useColor;
|
||||
|
||||
if (signState == SignStateOff) {
|
||||
useColor = gSignageOffColor;
|
||||
} else if ((1 << i) & warningMask) {
|
||||
useColor = gSignageOnColor;
|
||||
} else if (signState == SignStateUnlit) {
|
||||
useColor = gSignageDisabledUnlitColor;
|
||||
} else {
|
||||
useColor = gSignageDisabledColor;
|
||||
}
|
||||
|
||||
for (int vIndex = 0; vIndex < 4; ++vIndex) {
|
||||
((Vtx*)K0_TO_K1(gWarningVertices[i]))[vIndex].v.cn[0] = useColor.r;
|
||||
((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) {
|
||||
void signageCheckIndex(int neededIndex, enum SignState signState) {
|
||||
if (gCurrentSignageIndex == neededIndex && gCurrentSignageOn == signState) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -113,22 +130,21 @@ void signageCheckIndex(int neededIndex) {
|
|||
int oneDigit = neededIndex - tenDigit * 10;
|
||||
|
||||
gCurrentSignageIndex = neededIndex;
|
||||
gCurrentSignageOn = signState;
|
||||
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], signState);
|
||||
}
|
||||
|
||||
void signageRender(void* data, struct DynamicRenderDataList* renderList, struct RenderState* renderState) {
|
||||
struct Signage* signage = (struct Signage*)data;
|
||||
|
||||
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);}
|
||||
int signOn = ((int)gTimePassed) % 3;
|
||||
|
||||
signageCheckIndex(signage->testChamberNumber, signOn);
|
||||
|
||||
Mtx* matrix = renderStateRequestMatrices(renderState, 1);
|
||||
|
||||
|
@ -136,32 +152,31 @@ void signageRender(void* data, struct DynamicRenderDataList* renderList, struct
|
|||
return;
|
||||
}
|
||||
|
||||
Gfx* model = renderStateAllocateDLChunk(renderState, 4);
|
||||
Gfx* dl = model;
|
||||
if (signOn == SignStateOff) {
|
||||
gDPSetPrimColor(dl++, 255, 255, 46, 47, 49, 49);
|
||||
gDPSetEnvColor(dl++, 46, 47, 49, 255);
|
||||
} else if (signOn == SignStateUnlit) {
|
||||
gDPSetPrimColor(dl++, 255, 255, 46, 47, 49, 49);
|
||||
gDPSetEnvColor(dl++, 0, 0, 0, 255);
|
||||
} else {
|
||||
gDPSetPrimColor(dl++, 255, 255, 242, 245, 247, 255);
|
||||
gDPSetEnvColor(dl++, 0, 0, 0, 255);
|
||||
}
|
||||
gSPDisplayList(dl++, props_signage_model_gfx);
|
||||
gSPEndDisplayList(dl++);
|
||||
|
||||
transformToMatrixL(&signage->transform, matrix, SCENE_SCALE);
|
||||
|
||||
|
||||
if (signOn){
|
||||
dynamicRenderListAddData(
|
||||
renderList,
|
||||
props_signage_model_gfx,
|
||||
model,
|
||||
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) {
|
||||
|
|
Loading…
Reference in a new issue