From 398cc6bbec2ca16fbff7be3de0e421957ae36192 Mon Sep 17 00:00:00 2001 From: aap Date: Sun, 22 Mar 2020 11:40:18 +0100 Subject: fixed vehicle rendering bug --- src/core/RwMatFX.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/core/RwMatFX.cpp b/src/core/RwMatFX.cpp index 5fd00c54..ca9a633b 100644 --- a/src/core/RwMatFX.cpp +++ b/src/core/RwMatFX.cpp @@ -143,6 +143,7 @@ _rpMatFXD3D8AtomicMatFXEnvRender_ps2(RxD3D8InstanceData *inst, int flags, int se RwD3D8SetTexture(texture, 0); else RwD3D8SetTexture(nil, 0); + RwD3D8SetPixelShader(0); RwD3D8SetVertexShader(inst->vertexShader); RwD3D8SetStreamSource(0, inst->vertexBuffer, inst->stride); RwD3D8SetIndices(inst->indexBuffer, inst->baseIndex); -- cgit v1.2.3 From 5e37c3e805088f58392349c3c801d481d469dac2 Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Sun, 22 Mar 2020 13:26:35 +0200 Subject: Console --- src/core/common.h | 3 ++ src/core/main.cpp | 3 +- src/core/re3.cpp | 1 + src/render/Console.cpp | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/render/Console.h | 24 +++++++++++++ 5 files changed, 125 insertions(+), 1 deletion(-) create mode 100644 src/render/Console.cpp create mode 100644 src/render/Console.h diff --git a/src/core/common.h b/src/core/common.h index 9a5cdb38..562a69b4 100644 --- a/src/core/common.h +++ b/src/core/common.h @@ -370,3 +370,6 @@ inline T *WriteSaveBuf(uint8 *&buf, const T &value) assert(ReadSaveBuf(buf) == c);\ assert(ReadSaveBuf(buf) == d);\ assert(ReadSaveBuf(buf) == size); + + +void cprintf(char*, ...); \ No newline at end of file diff --git a/src/core/main.cpp b/src/core/main.cpp index 90afff72..c13d3618 100644 --- a/src/core/main.cpp +++ b/src/core/main.cpp @@ -49,6 +49,7 @@ #include "Frontend.h" #include "AnimViewer.h" #include "Script.h" +#include "Console.h" #define DEFAULT_VIEWWINDOW (Tan(DEGTORAD(CDraw::GetFOV() * 0.5f))) @@ -429,7 +430,7 @@ Render2dStuff(void) } MusicManager.DisplayRadioStationName(); -// TheConsole.Display(); + TheConsole.Display(); /* if(CSceneEdit::m_bEditOn) CSceneEdit::Draw(); diff --git a/src/core/re3.cpp b/src/core/re3.cpp index ed32632f..6f0a4682 100644 --- a/src/core/re3.cpp +++ b/src/core/re3.cpp @@ -19,6 +19,7 @@ #include "Ped.h" #include "debugmenu_public.h" #include "Particle.h" +#include "Console.h" #include #include diff --git a/src/render/Console.cpp b/src/render/Console.cpp new file mode 100644 index 00000000..898f4d44 --- /dev/null +++ b/src/render/Console.cpp @@ -0,0 +1,95 @@ +#include "common.h" +#include "patcher.h" +#include "Console.h" +#include "Font.h" +#include "Timer.h" + +#define CONSOLE_X_POS (30.0f) +#define CONSOLE_Y_POS (10.0f) +#define CONSOLE_LINE_HEIGHT (12.0f) + +CConsole &TheConsole = *(CConsole*)0x8F6498; + +void +CConsole::AddLine(char *s, uint8 r, uint8 g, uint8 b) +{ + char tempstr[MAX_STR_LEN+1]; + + while (strlen(s) > MAX_STR_LEN) { + strncpy_s(tempstr, s, MAX_STR_LEN); + tempstr[MAX_STR_LEN-1] = '\0'; + s += MAX_STR_LEN - 1; + AddOneLine(tempstr, r, g, b); + } + AddOneLine(s, r, g, b); +} + +void +CConsole::AddOneLine(char *s, uint8 r, uint8 g, uint8 b) +{ + int32 StrIndex = (m_nLineCount + m_nCurrentLine) % MAX_LINES; + + for (int32 i = 0; i < MAX_STR_LEN; i++) { + Buffers[StrIndex][i] = s[i]; + if (s[i] == '\0') break; + } + + uint8 _strNum1 = m_nLineCount; + if (_strNum1 < MAX_LINES) + _strNum1++; + + m_aTimer[StrIndex] = CTimer::GetTimeInMilliseconds(); + Buffers[StrIndex][MAX_STR_LEN-1] = '\0'; + m_aRed[StrIndex] = r; + m_aGreen[StrIndex] = g; + m_aBlue[StrIndex] = b; + + if (_strNum1 >= MAX_LINES) + m_nCurrentLine = (m_nCurrentLine + 1) % MAX_LINES; + else + m_nLineCount = _strNum1; + +} + +void +CConsole::Display() +{ + CFont::SetPropOn(); + CFont::SetBackgroundOff(); + CFont::SetScale(0.6f, 0.6f); + CFont::SetCentreOff(); + CFont::SetRightJustifyOff(); + CFont::SetJustifyOn(); + CFont::SetRightJustifyWrap(0.0f); + CFont::SetBackGroundOnlyTextOff(); + CFont::SetFontStyle(FONT_BANK); +#ifndef FIX_BUGS + CFont::SetPropOff(); // not sure why this is here anyway +#endif + CFont::SetWrapx(RsGlobal.width); + + while (m_nLineCount != 0 && CTimer::GetTimeInMilliseconds() - m_aTimer[m_nCurrentLine] > 20000) { + m_nLineCount--; + m_nCurrentLine = (m_nCurrentLine + 1) % MAX_LINES; + } + + for (int16 i = 0; i < m_nLineCount; i++) { + int16 line = (i + m_nCurrentLine) % MAX_LINES; + CFont::SetColor(CRGBA(0, 0, 0, 200)); + CFont::PrintString(CONSOLE_X_POS + 1.0f, CONSOLE_Y_POS + 1.0f + i * CONSOLE_LINE_HEIGHT, Buffers[line]); + CFont::SetColor(CRGBA(m_aRed[line], m_aGreen[line], m_aBlue[line], 200)); + CFont::PrintString(CONSOLE_X_POS, CONSOLE_Y_POS + i * CONSOLE_LINE_HEIGHT, Buffers[line]); + } +} + +void +cprintf(char* format, ...) +{ + char s[256]; + va_list vl1, vl2; + + va_start(vl1, format); + va_copy(vl2, vl1); + vsprintf(s, format, vl1); + TheConsole.AddLine(s, 255, 255, 128); +} \ No newline at end of file diff --git a/src/render/Console.h b/src/render/Console.h new file mode 100644 index 00000000..eb84c1a5 --- /dev/null +++ b/src/render/Console.h @@ -0,0 +1,24 @@ +#pragma once + +class CConsole +{ + enum + { + MAX_LINES = 8, // BUG? only shows 7 + MAX_STR_LEN = 40, + }; + + uint8 m_nLineCount; + uint8 m_nCurrentLine; + wchar Buffers[MAX_LINES][MAX_STR_LEN]; + uint32 m_aTimer[MAX_LINES]; + uint8 m_aRed[MAX_LINES]; + uint8 m_aGreen[MAX_LINES]; + uint8 m_aBlue[MAX_LINES]; +public: + void AddLine(char *s, uint8 r, uint8 g, uint8 b); + void AddOneLine(char *s, uint8 r, uint8 g, uint8 b); + void Display(); +}; + +extern CConsole &TheConsole; \ No newline at end of file -- cgit v1.2.3