void renderStepZoneDMX(int player) { int startColumn = player == 0 ? 0 : 4; if ( gs.isSingles() ) { if ( gs.player[0].centerLeft ) { startColumn = 0; } else if ( gs.player[0].centerRight ) { startColumn = 4; } else { startColumn = 2; // center play } } int endColumn = gs.isDoubles ? 8 : startColumn+4; for ( int i = startColumn; i < endColumn; i++ ) { int x = getColumnOffsetX_DMX(i); int blink = gs.player[player].stepZoneBlinkTimer > 0 ? 0 : 1; // pick the state of the step zone int hitcolor = 0x7F000000; int outlineColor = 0xFFB4B4B4; const int fadeOutLength = 100; if ( blink == 1 ) { static int colors[3] = { makeacol(41, 239, 115, 255), makeacol(239, 101, 190, 255), makeacol(76, 0, 190, 255) }; int stageColor = gs.player[player].stagesLevels[gs.currentStage] % 10; outlineColor = colors[stageColor]; } if ( gs.player[player].laneFlareColors[i] == 2 ) { blink = 2; // currently holding a hold note in this column } int color = getColorOfColumn(i); if ( im.isKeyDown(i) ) { hitcolor = color == 0 ? 0xEECC0000 : 0xEE0000CC; } else if ( im.getReleaseLength(i) <= fadeOutLength ) { int a = getValueFromRange(0xFF, 0x7F, im.getReleaseLength(i) * 100/ fadeOutLength); if ( i ==4 ) { al_trace("%d\r\n", a); } hitcolor = color == 0 ? makeacol32(0xFF, 0, 0, a) : makeacol32(0, 0, 0xFF, a); } renderStepLaneDMX(x, hitcolor, outlineColor); masked_blit(m_stepZoneSourceDMX[color], rm.m_backbuf, blink*34, 0, x, (gs.player[player].isColumnReversed(i) ? DMX_STEP_ZONE_REV_Y-34 : DMX_STEP_ZONE_Y), 34, 38); } }
void renderDMXNote(int player, struct ARROW n, int y) { int x = getColumnOffsetX_DMX(n.columns[0]); int leftX = getColumnOffsetX_DMX(0); int rightX = getColumnOffsetX_DMX(3) + 34-1; if ( gs.isDoubles || (gs.isVersus && player == 1) || gs.player[0].centerRight ) { rightX = getColumnOffsetX_DMX(7) + 34-1; if ( (gs.isVersus && player == 1) || gs.player[0].centerRight ) { leftX = getColumnOffsetX_DMX(4); } } if ( gs.isSingles() && gs.player[0].isCenter() ) { leftX = getColumnOffsetX_DMX(1); rightX = getColumnOffsetX_DMX(6) +34-1; } // implement reverse - the stepzone will take care of itself, this is just the notes int originalY = y; if ( gs.player[player].reverseModifier != 0 ) { y = DMX_STEP_ZONE_REV_Y - y; } switch ( n.type ) { case TAP: renderDMXArrow(player, n.columns[0], 0, n.judgement, x-2, gs.player[player].isColumnReversed(n.columns[0]) ? y+40 : originalY); //renderWhiteNumber(n.timing, getColumnOffsetX_DMX(0)-64, gs.player[player].isColumnReversed(n.columns[0]) ? y+40 : originalY); break; case JUMP: for ( int i = 0; i < 4; i++ ) { if ( n.columns[i] != -1 ) { x = getColumnOffsetX_DMX(n.columns[i]); renderDMXArrow(player, n.columns[i], 0, n.judgement, x-2, gs.player[player].isColumnReversed(n.columns[i]) ? y+40 : originalY); } //renderWhiteNumber(n.timing, getColumnOffsetX_DMX(0)-64, gs.player[player].isColumnReversed(n.columns[0]) ? y+40 : originalY); } break; //case HOLD_START: //case HOLD_END: //break; // intentionally do nothing case SHOCK: break; // intentionally do nothing case NEW_SECTION: break; case END_SONG: //renderEndSongMarker(leftX, rightX, (gs.player[player].reverseModifier != 0 ? y+74 : y)); break; case BPM_CHANGE: if ( ABS(n.color - gs.player[player].scrollRate) >= 5 && n.timing > 0 ) { renderBPMMarker(leftX, rightX, (gs.player[player].reverseModifier != 0 ? y+74 : y), n.color); } break; case SCROLL_STOP: renderTempoStopMarker(leftX, rightX, (gs.player[player].reverseModifier != 0 ? y+74 : y), n.color); break; } }