From a50e8ecf48602582ff64f90484637ffbbf3b7380 Mon Sep 17 00:00:00 2001 From: Misa <infoteddy@infoteddy.info> Date: Sun, 12 Sep 2021 12:48:15 -0700 Subject: [PATCH] Replace roomnames/hiddennames/glitchnames with `const char*` Since those are all downstream recipients of either static storage or memory that doesn't move for the duration of the custom level, it's okay to make these be `const char*`s without having to redo any of the RAII memory management. mapclass::currentarea() is included in this as well. I also cleaned up Tower.cpp's headers to fix some transitive includes because I was removing UtilityClass.h includes from all other level files too. The "Untitled room" names no longer show any coordinates, because doing so would require complicated memory management that's completely unneeded. No one will ever see them, and if they do they already know they have a problem anyway. The only time they might be able to see them is if they corrupted the areamap, but this was only possible in 2.2 and previous by dying outside the room deaths array in Outside Dimension VVVVVV, which has since been patched out. Besides, sometimes the "Untitled room" gets overwritten by something else anyway (especially in Finalclass.cpp), so it really, really doesn't matter. --- desktop_version/src/Finalclass.cpp | 3 - desktop_version/src/Finalclass.h | 4 +- desktop_version/src/Game.cpp | 6 +- desktop_version/src/Labclass.cpp | 3 +- desktop_version/src/Labclass.h | 4 +- desktop_version/src/Map.cpp | 87 ++++++++++++++------------- desktop_version/src/Map.h | 14 ++--- desktop_version/src/Otherlevel.h | 6 +- desktop_version/src/Render.cpp | 4 +- desktop_version/src/Spacestation2.cpp | 3 +- desktop_version/src/Spacestation2.h | 4 +- desktop_version/src/Tower.cpp | 4 +- desktop_version/src/WarpClass.cpp | 3 +- desktop_version/src/WarpClass.h | 4 +- 14 files changed, 69 insertions(+), 80 deletions(-) diff --git a/desktop_version/src/Finalclass.cpp b/desktop_version/src/Finalclass.cpp index 711c0c84..66dd9025 100644 --- a/desktop_version/src/Finalclass.cpp +++ b/desktop_version/src/Finalclass.cpp @@ -3,7 +3,6 @@ #include "Game.h" #include "Entity.h" #include "MakeAndPlay.h" -#include "UtilityClass.h" const short* finalclass::loadlevel(int rx, int ry) { @@ -14,8 +13,6 @@ const short* finalclass::loadlevel(int rx, int ry) warpx = false; warpy = false; - roomname = "Untitled room ["+help.String(rx) + "," + help.String(ry)+"]"; - switch(t) { #if !defined(MAKEANDPLAY) diff --git a/desktop_version/src/Finalclass.h b/desktop_version/src/Finalclass.h index eb0572b7..60c04300 100644 --- a/desktop_version/src/Finalclass.h +++ b/desktop_version/src/Finalclass.h @@ -1,14 +1,12 @@ #ifndef FINALCLASS_H #define FINALCLASS_H -#include <string> - class finalclass { public: const short* loadlevel(int rx, int ry); - std::string roomname; + const char* roomname; bool warpx, warpy; }; diff --git a/desktop_version/src/Game.cpp b/desktop_version/src/Game.cpp index c0af5401..e244e5fe 100644 --- a/desktop_version/src/Game.cpp +++ b/desktop_version/src/Game.cpp @@ -3934,7 +3934,7 @@ void Game::gethardestroom(void) { hardestroomdeaths = currentroomdeaths; hardestroom = map.roomname; - if (map.roomname == "glitch") + if (SDL_strcmp(map.roomname, "glitch") == 0) { if (roomx == 42 && roomy == 51) { @@ -3949,7 +3949,7 @@ void Game::gethardestroom(void) hardestroom = "The Untouchavles"; } } - else if (map.roomname == "change") + else if (SDL_strcmp(map.roomname, "change") == 0) { if (roomx == 45 && roomy == 51) hardestroom =map.specialnames[3]; if (roomx == 46 && roomy == 51) hardestroom =map.specialnames[4]; @@ -3957,7 +3957,7 @@ void Game::gethardestroom(void) if (roomx == 50 && roomy == 53) hardestroom =map.specialnames[6]; if (roomx == 50 && roomy == 54) hardestroom = map.specialnames[7]; } - else if (map.roomname == "") + else if (SDL_strcmp(map.roomname, "") == 0) { hardestroom = map.hiddenname; } diff --git a/desktop_version/src/Labclass.cpp b/desktop_version/src/Labclass.cpp index f3a9ce20..df795c4d 100644 --- a/desktop_version/src/Labclass.cpp +++ b/desktop_version/src/Labclass.cpp @@ -3,7 +3,6 @@ #include "Game.h" #include "Entity.h" #include "MakeAndPlay.h" -#include "UtilityClass.h" const short* labclass::loadlevel(int rx, int ry) { @@ -25,7 +24,7 @@ const short* labclass::loadlevel(int rx, int ry) t = rx + (ry * 100); const short* result; rcol = 0; - roomname = "Untitled room ["+help.String(rx) + "," + help.String(ry)+"]"; + roomname = ""; switch(t) { diff --git a/desktop_version/src/Labclass.h b/desktop_version/src/Labclass.h index 6c9e72de..ac650d0f 100644 --- a/desktop_version/src/Labclass.h +++ b/desktop_version/src/Labclass.h @@ -1,14 +1,12 @@ #ifndef LABCLASS_H #define LABCLASS_H -#include <string> - class labclass { public: const short* loadlevel(int rx, int ry); - std::string roomname; + const char* roomname; int rcol; }; #endif /* LABCLASS_H */ diff --git a/desktop_version/src/Map.cpp b/desktop_version/src/Map.cpp index 0bb2666c..a44ace19 100644 --- a/desktop_version/src/Map.cpp +++ b/desktop_version/src/Map.cpp @@ -84,6 +84,9 @@ mapclass::mapclass(void) roomtexton = false; nexttowercolour_set = false; + + roomname = ""; + hiddenname = ""; } //Areamap starts at 100,100 and extends 20x20 @@ -164,159 +167,159 @@ void mapclass::transformname(int t) { case 3: //Television Newsveel -> The 9 O'Clock News - if (specialnames[3] == "Television Newsveel") + if (SDL_strcmp(specialnames[3], "Television Newsveel") == 0) { specialnames[3] = "Television Newsvel"; } - else if (specialnames[3] == "Television Newsvel") + else if (SDL_strcmp(specialnames[3], "Television Newsvel") == 0) { specialnames[3] = "TelevisvonvNewsvel"; } - else if (specialnames[3] == "TelevisvonvNewsvel") + else if (SDL_strcmp(specialnames[3], "TelevisvonvNewsvel") == 0) { specialnames[3] = "TvlvvvsvonvNevsvel"; } - else if (specialnames[3] == "TvlvvvsvonvNevsvel") + else if (SDL_strcmp(specialnames[3], "TvlvvvsvonvNevsvel") == 0) { specialnames[3] = "vvvvvvsvovvNe svel"; } - else if (specialnames[3] == "vvvvvvsvovvNe svel") + else if (SDL_strcmp(specialnames[3], "vvvvvvsvovvNe svel") == 0) { specialnames[3] = "vhv vvv'vvovv vevl"; } - else if (specialnames[3] == "vhv vvv'vvovv vevl") + else if (SDL_strcmp(specialnames[3], "vhv vvv'vvovv vevl") == 0) { specialnames[3] = "vhv V v'Cvovv vewv"; } - else if (specialnames[3] == "vhv V v'Cvovv vewv") + else if (SDL_strcmp(specialnames[3], "vhv V v'Cvovv vewv") == 0) { specialnames[3] = "vhe 9 v'Cvovv vewv"; } - else if (specialnames[3] == "vhe 9 v'Cvovv vewv") + else if (SDL_strcmp(specialnames[3], "vhe 9 v'Cvovv vewv") == 0) { specialnames[3] = "vhe 9 v'Cvovv Newv"; } - else if (specialnames[3] == "vhe 9 v'Cvovv Newv") + else if (SDL_strcmp(specialnames[3], "vhe 9 v'Cvovv Newv") == 0) { specialnames[3] = "The 9 O'Cvovk Newv"; } - else if (specialnames[3] == "The 9 O'Cvovk Newv") + else if (SDL_strcmp(specialnames[3], "The 9 O'Cvovk Newv") == 0) { specialnames[3] = "The 9 O'Clock News"; } break; case 4: //Vwitched -> Dial M for Murder - if (specialnames[4] == "Vwitched") + if (SDL_strcmp(specialnames[4], "Vwitched") == 0) { specialnames[4] = "Vwitvhed"; } - else if (specialnames[4] == "Vwitvhed") + else if (SDL_strcmp(specialnames[4], "Vwitvhed") == 0) { specialnames[4] = "vVwivcvedv"; } - else if (specialnames[4] == "vVwivcvedv") + else if (SDL_strcmp(specialnames[4], "vVwivcvedv") == 0) { specialnames[4] = "vvvwMvcvMdvv"; } - else if (specialnames[4] == "vvvwMvcvMdvv") + else if (SDL_strcmp(specialnames[4], "vvvwMvcvMdvv") == 0) { specialnames[4] = "DvvvwMvfvvMdvvv"; } - else if (specialnames[4] == "DvvvwMvfvvMdvvv") + else if (SDL_strcmp(specialnames[4], "DvvvwMvfvvMdvvv") == 0) { specialnames[4] = "Dvav Mvfvr Mdvvvv"; } - else if (specialnames[4] == "Dvav Mvfvr Mdvvvv") + else if (SDL_strcmp(specialnames[4], "Dvav Mvfvr Mdvvvv") == 0) { specialnames[4] = "Diav M for Mdrver"; } - else if (specialnames[4] == "Diav M for Mdrver") + else if (SDL_strcmp(specialnames[4], "Diav M for Mdrver") == 0) { specialnames[4] = "Dial M for Murder"; } break; case 5: //Gvnsmoke -> Gunsmoke 1966 - if (specialnames[5] == "Gvnsmoke") + if (SDL_strcmp(specialnames[5], "Gvnsmoke") == 0) { specialnames[5] = "Gvnsmove"; } - else if (specialnames[5] == "Gvnsmove") + else if (SDL_strcmp(specialnames[5], "Gvnsmove") == 0) { specialnames[5] = "Gvnvmovevv"; } - else if (specialnames[5] == "Gvnvmovevv") + else if (SDL_strcmp(specialnames[5], "Gvnvmovevv") == 0) { specialnames[5] = "Gunvmove1vv6"; } - else if (specialnames[5] == "Gunvmove1vv6") + else if (SDL_strcmp(specialnames[5], "Gunvmove1vv6") == 0) { specialnames[5] = "Vunsmoke 19v6"; } - else if (specialnames[5] == "Vunsmoke 19v6") + else if (SDL_strcmp(specialnames[5], "Vunsmoke 19v6") == 0) { specialnames[5] = "Gunsmoke 1966"; } break; case 6: //Please enjoy these repeats -> In the Margins - if (specialnames[6] == "Please enjoy these repeats") + if (SDL_strcmp(specialnames[6], "Please enjoy these repeats") == 0) { specialnames[6] = "Please envoy theve repeats"; } - else if (specialnames[6] == "Please envoy theve repeats") + else if (SDL_strcmp(specialnames[6], "Please envoy theve repeats") == 0) { specialnames[6] = "Plse envoy tse rvpvas"; } - else if (specialnames[6] == "Plase envoy these rvpeas") + else if (SDL_strcmp(specialnames[6], "Plase envoy these rvpeas") == 0) { specialnames[6] = "Plse envoy tse rvpvas"; } - else if (specialnames[6] == "Plse envoy tse rvpvas") + else if (SDL_strcmp(specialnames[6], "Plse envoy tse rvpvas") == 0) { specialnames[6] = "Vl envoy te rvevs"; } - else if (specialnames[6] == "Vl envoy te rvevs") + else if (SDL_strcmp(specialnames[6], "Vl envoy te rvevs") == 0) { specialnames[6] = "Vv evo tv vevs"; } - else if (specialnames[6] == "Vv evo tv vevs") + else if (SDL_strcmp(specialnames[6], "Vv evo tv vevs") == 0) { specialnames[6] = "Iv vhv Mvrvivs"; } - else if (specialnames[6] == "Iv vhv Mvrvivs") + else if (SDL_strcmp(specialnames[6], "Iv vhv Mvrvivs") == 0) { specialnames[6] = "In the Margins"; } break; case 7: //Try Jiggling the Antenna -> Heaven's Gate - if (specialnames[7] == "Try Jiggling the Antenna") + if (SDL_strcmp(specialnames[7], "Try Jiggling the Antenna") == 0) { specialnames[7] = "Try Viggling the Antenna"; } - else if (specialnames[7] == "Try Viggling the Antenna") + else if (SDL_strcmp(specialnames[7], "Try Viggling the Antenna") == 0) { specialnames[7] = "TryJivglvng theAvtevna"; } - else if (specialnames[7] == "TryJivglvng theAvtevna") + else if (SDL_strcmp(specialnames[7], "TryJivglvng theAvtevna") == 0) { specialnames[7] = "Tvvivglvng thAvtvvv"; } - else if (specialnames[7] == "Tvvivglvng thAvtvvv") + else if (SDL_strcmp(specialnames[7], "Tvvivglvng thAvtvvv") == 0) { specialnames[7] = "Vvvgglvnv tvnvva"; } - else if (specialnames[7] == "Vvvgglvnv tvnvva") + else if (SDL_strcmp(specialnames[7], "Vvvgglvnv tvnvva") == 0) { specialnames[7] = "Vvavvnvs vvtv"; } - else if (specialnames[7] == "Vvavvnvs vvtv") + else if (SDL_strcmp(specialnames[7], "Vvavvnvs vvtv") == 0) { specialnames[7] = "Veavvn's Gvte"; } - else if (specialnames[7] == "Veavvn's Gvte") + else if (SDL_strcmp(specialnames[7], "Veavvn's Gvte") == 0) { specialnames[7] = "Heaven's Gate"; } @@ -331,10 +334,10 @@ void mapclass::transformname(int t) } } -std::string mapclass::getglitchname(int x, int y) +const char* mapclass::getglitchname(int x, int y) { //Returns the name in the final area. - if (roomname == "glitch") + if (SDL_strcmp(roomname, "glitch") == 0) { //8 Cases! //First, the three "glitches" @@ -371,7 +374,7 @@ std::string mapclass::getglitchname(int x, int y) else return "The Untouchavles"; } } - else if (roomname == "change") + else if (SDL_strcmp(roomname, "change") == 0) { if (finalstretch) { @@ -1282,7 +1285,7 @@ void mapclass::spawncompanion(void) } } -std::string mapclass::currentarea(int t) +const char* mapclass::currentarea(int t) { switch(t) { @@ -1811,7 +1814,7 @@ void mapclass::loadlevel(int rx, int ry) break; } - roomname = room->roomname; + roomname = room->roomname.c_str(); extrarow = 1; const int* tmap = cl.loadlevel(rx, ry); SDL_memcpy(contents, tmap, sizeof(contents)); @@ -1921,7 +1924,7 @@ void mapclass::loadlevel(int rx, int ry) Roomtext text; text.x = ex / 8; text.y = ey / 8; - text.text = ent.scriptname; + text.text = ent.scriptname.c_str(); roomtext.push_back(text); break; } diff --git a/desktop_version/src/Map.h b/desktop_version/src/Map.h index 264275a8..4ca12178 100644 --- a/desktop_version/src/Map.h +++ b/desktop_version/src/Map.h @@ -15,7 +15,7 @@ struct Roomtext { int x, y; - std::string text; + const char* text; }; class mapclass @@ -35,7 +35,7 @@ public: void transformname(int t); - std::string getglitchname(int x, int y); + const char* getglitchname(int x, int y); void initmapdata(void); void initcustommapdata(void); @@ -83,7 +83,7 @@ public: void spawncompanion(void); - std::string currentarea(int t); + const char* currentarea(int t); void loadlevel(int rx, int ry); @@ -107,8 +107,8 @@ public: bool warpy; - std::string roomname; - std::string hiddenname; + const char* roomname; + const char* hiddenname; //Special tower stuff bool towermode; @@ -135,10 +135,10 @@ public: int customzoom; bool customshowmm; - std::string specialnames[8]; + const char* specialnames[8]; int glitchmode; int glitchdelay; - std::string glitchname; + const char* glitchname; //final level colour cycling stuff bool final_colormode; diff --git a/desktop_version/src/Otherlevel.h b/desktop_version/src/Otherlevel.h index 770d7956..983b9dc0 100644 --- a/desktop_version/src/Otherlevel.h +++ b/desktop_version/src/Otherlevel.h @@ -1,15 +1,13 @@ #ifndef OTHERLEVEL_H #define OTHERLEVEL_H -#include <string> - class otherlevelclass { public: const short* loadlevel(int rx, int ry); - std::string roomname; - std::string hiddenname; + const char* roomname; + const char* hiddenname; int roomtileset; }; diff --git a/desktop_version/src/Render.cpp b/desktop_version/src/Render.cpp index 7bcf52ab..2c8fa518 100644 --- a/desktop_version/src/Render.cpp +++ b/desktop_version/src/Render.cpp @@ -1739,7 +1739,7 @@ void gamerender(void) graphics.bprint(46, 6, game.timestring(), 196, 196, 196); } - if(map.extrarow==0 || (map.custommode && map.roomname!="")) + if(map.extrarow==0 || (map.custommode && SDL_strcmp(map.roomname, "") != 0)) { graphics.footerrect.y = 230; if (graphics.translucentroomname) @@ -2017,7 +2017,7 @@ void maprender(void) //draw screen alliteration //Roomname: - if (map.hiddenname != "") + if (SDL_strcmp(map.hiddenname, "") != 0) { graphics.Print(5, 2, map.hiddenname, 196, 196, 255 - help.glow, true); } diff --git a/desktop_version/src/Spacestation2.cpp b/desktop_version/src/Spacestation2.cpp index 5f9d56d5..385c9ba5 100644 --- a/desktop_version/src/Spacestation2.cpp +++ b/desktop_version/src/Spacestation2.cpp @@ -3,7 +3,6 @@ #include "Game.h" #include "Entity.h" #include "MakeAndPlay.h" -#include "UtilityClass.h" const short* spacestation2class::loadlevel(int rx, int ry) { @@ -17,7 +16,7 @@ const short* spacestation2class::loadlevel(int rx, int ry) t = rx + (ry * 100); const short* result; - roomname = "Untitled room ["+help.String(rx) + "," + help.String(ry)+"]"; + roomname = "Untitled room"; switch(t) { diff --git a/desktop_version/src/Spacestation2.h b/desktop_version/src/Spacestation2.h index fc82da10..b316b618 100644 --- a/desktop_version/src/Spacestation2.h +++ b/desktop_version/src/Spacestation2.h @@ -1,13 +1,11 @@ #ifndef SPACESTATION2_H #define SPACESTATION2_H -#include <string> - class spacestation2class { public: const short* loadlevel(int rx, int ry); - std::string roomname; + const char* roomname; }; #endif /* SPACESTATION2_H */ diff --git a/desktop_version/src/Tower.cpp b/desktop_version/src/Tower.cpp index 91bc4598..c34c5b5d 100644 --- a/desktop_version/src/Tower.cpp +++ b/desktop_version/src/Tower.cpp @@ -1,7 +1,9 @@ #include "Tower.h" +#include <SDL_stdinc.h> +#include <stddef.h> + #include "MakeAndPlay.h" -#include "UtilityClass.h" towerclass::towerclass(void) { diff --git a/desktop_version/src/WarpClass.cpp b/desktop_version/src/WarpClass.cpp index 61b0ba23..2d6f94f5 100644 --- a/desktop_version/src/WarpClass.cpp +++ b/desktop_version/src/WarpClass.cpp @@ -3,7 +3,6 @@ #include "Game.h" #include "Entity.h" #include "MakeAndPlay.h" -#include "UtilityClass.h" const short* warpclass::loadlevel(int rx, int ry) { @@ -20,7 +19,7 @@ const short* warpclass::loadlevel(int rx, int ry) warpx = false; warpy = false; - roomname = "Untitled room ["+help.String(rx) + "," + help.String(ry)+"]"; + roomname = "Untitled room"; switch(t) { diff --git a/desktop_version/src/WarpClass.h b/desktop_version/src/WarpClass.h index 5c5edbb6..61d0ba4e 100644 --- a/desktop_version/src/WarpClass.h +++ b/desktop_version/src/WarpClass.h @@ -1,13 +1,11 @@ #ifndef WARPCLASS_H #define WARPCLASS_H -#include <string> - class warpclass { public: const short* loadlevel(int rx, int ry); - std::string roomname; + const char* roomname; int rcol; bool warpx, warpy; };