Bay 12 Games Forum

Please login or register.

Login with username, password and session length
Advanced search  

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - Jonathan S. Fox

Pages: 1 ... 4 5 [6] 7 8 ... 249
76
Curses / Re: LCS 4.07.0 Download (Sneak Attacks, April 2013)
« on: September 17, 2013, 10:31:45 am »
Thank you for putting that list together, Liberal Elitist!

77
Curses / Re: Fixes for Code::Blocks IDE
« on: August 24, 2013, 11:02:32 pm »
You're doing a lot of awesome stuff with the code, and I don't want to dissuade you from editing boldly, especially since things can always be reverted. However, with regard to the recent work you've been doing with gender code, I strongly favor NOT changing how the gender neutral is displayed, and how "fix gender label" works in the character sheet. I've put a huge amount of thought into the way that system works now, and I want to share the reasoning and thought that went into why it works the way it does now.

Having the "fix gender label" option work so fluidly was the only thing that made me willing to include gender in the game at all. Tarn Adams didn't have it in the game at all, making the entire LCS completely blind to gender and sexual orientation. You could speculate based on names, but that was entirely in your mind, not the game; there was literally no representation of gender under the hood. It was important to me to keep to the spirit of this Elite Liberal approach to gender in the game, so for a long time I resisted any push to add it. Eventually, I did add gender because I saw the opportunity to expose the LCS to sexism through the bouncer at the gentleman's club. In order to maintain the Elite Liberal stance of the game itself, I then proceeded to leave the default "everyone is bisexual" mechanic in place, and allowed you to change the presented gender label of any of your Liberals at will. Even the use of the word "fix" is intended to respect the idea that you aren't even necessarily changing anything about your character; they may have always been Male. You're just correcting the game's error.

Changing this to require a certain level of Liberalism in gay rights laws in order to toggle your gender label seems to break the implicit barrier between the in-game Liberal Reality and Conservative Oppression. You're playing as the Liberal Crime Squad, not the meek moderate team, and you don't need society or the government's approval for your image or your actions. Who cares what the laws say? The only place that Conservative laws should matter at all is in how the world around you reacts to your choices. You could, for example, add a crime attached to breaking gender normative clothing standards. You could make it so certain social actions are more difficult if you can't pass disguise checks when your conservative_gender and liberal_gender aren't in sync. But even in Nightmare Mode, the concept of people challenging Conservative gender standards is still there. The game itself has a chance of spawning high level Conservative Men in male-dominated professions who are actually tagged as women in their gender_conservative stat -- conceived of as brilliant women who transformed their own gender identity and presentation to the world in order to break the glass (or steel) ceiling, or simply transmen who have the disguise skill to avoid being arrested or even suspected of their gender crimes, even as they penetrate the highest echelons of Conservative society.

As far as the display of the player's selection goes, the game's UI is generally unequivocally Elite Liberal in its presentation, when it shows a bias. Disbanding always requires you to type in an Elite Liberal phrase, full health is always described as Liberal, Liberal and Conservative always mean good and bad respectively, Conservatives with high juice are always given disrespectful titles, and so on. Neither social views nor the law change any of this; you're always playing through the green-tinted glasses of the LCS. (Even the pervasive censorship that takes place at C+ free speech is largely dropped in interrogation scenes and other situations where the LCS is free to act freely.) As such, the display of the player's choice should respect that choice, rather than questioning it. I left the asterisk showing a contradiction off because, after some consideration, I decided it downplayed the legitimacy of choices contrary to the one the game gave you to start with (if the game assigns you as Female for your gender_conservative, you can't be Male, always Male*? That doesn't seem right...), and because the player is going to know that they're changing people's gender labels if they do it; you don't actually have to remind them they did so. If it comes up at all, any incongruity will only be brought up in the mouth of Disrespectful Conservatives, not from the UI, which is consummately respectful toward the LCS.

Of the presentation of GENDER_NEUTRAL, the only labels on the list that I think are accurate and respectful enough are androgynous and genderqueer; transgender is inaccurate, and the others are intentionally degrading (ambiguous isn't awful, but it's extremely narrow). I'm aware that not everyone who would disavow Male/Female as a gender label would embrace "Androgynous", but I picked it because it's unlikely to be objectionable to anyone. More aggressive use of Liberal Language, like the label genderqueer and new pronouns, is appropriate to the game's tone but is also very personal. Even within the broad spectrum of activists involved in sexuality and gender issues, I'm not aware of any consensus on universally applicable labels and pronouns, except the concept of respecting an individual's choice of how they wish to present themselves and interact with the world. At least to me, it feels like any choice to universally embrace one set of words to frame things would disenfranchise others. That perception may not be accurate, but it's what informed the current state of the game.

78
Curses / Re: LCS Why is Rock music punishable by death?
« on: August 22, 2013, 06:28:41 pm »
The real reason guitars result in violence is that playing a guitar is a form of attack in the game, just like punching, shooting, or using other persuasion attacks like News Anchors flashing smiles or Judges debating the death penalty. In LCS, persuasion attacks are considered just as aggressive as physical assault, and any enemies will defend themselves accordingly, including running for their lives, calling the police, or unloading deadly weaponry in your general direction. Once the violence is over, it isn't actually a crime to rock out on a guitar in public, but you can tell that to the judge.

79
Curses / Re: National LCS Revisited (4.07.3 Beta Release!)
« on: August 22, 2013, 06:21:48 pm »
Well, if you take ALL of your people out of the location, even the ones who aren't going to get arrested, they just show up and leave everything alone. No funds are taken, no dismantling of the compound. They wont even take any of the 100+ assault rifles lying around.

If you leave innocent characters there, they will show up and say "You are wanted for Finding a Bug" instead of actually stating any real crimes, leading me to believe that it is actually a bug and not intended behavior.

AHH so it IS a bug! Yes, that text about "Finding a Bug" was put in there precisely to catch bugs like this. Sorry! Yes, you did find a bug.

I dare say the real bug is that the flavor text says you found a bug even though the situation is perfectly reasonable. It should probably say "You are wanted on suspicion of harboring criminals" or something like that.

80
Curses / Re: LCS Why is Rock music punishable by death?
« on: August 22, 2013, 01:16:08 pm »
They way the Conservatives see it, any Liberal with a guitar is on an acoustic rampage, engaged in a full-throated assault on innocent Conservative values. There's only one way to stop a person like that, and it's with a bullet to the head.

81
Curses / Re: Fixes for Code::Blocks IDE
« on: August 21, 2013, 06:19:17 pm »
I want to advise you on your commit messages; from the most recent:

Quote
Windows XP and later have a font display option called ClearType, but ClearType has a bug in it that affects this game. When the ClearType feature is enabled, it causes display problems in Liberal Crime Squad as well as other Win32 Console Applications, especially if different background colors are used, if you are using a TrueType font like Lucida Console for the display of the game instead of a raster font. The bug in ClearType is visible on the screen as vertical lines in between characters on the screen. This is most visible on the newspaper screens, or if you are going back and forth from the main screen when the main screen has a U.S. flag on it, or especially in the colorful Curses text animations (new news anchor, show about rich and famous, caught on camera of black guy getting beaten, etc.). This bug can only be solved by disabling ClearType (since Microsoft obviously isn't going to offer any more non-security-related fixes for Windows XP). However, ClearType is useful in other programs and a lot of people like it. So, a good solution is to temporarily disable ClearType while Liberal Crime Squad is running, and then re-enable it after the game is over. Of course, people might not have it enabled; they might be using standard font smoothing instead or have font smoothing completely disabled. So, there is a new option in init.txt called "fixcleartype". If this is disabled (and it IS disabled by default), the game does not mess with ClearType or font smoothing settings at all. If it is enabled, the font smoothing settings are backed up when the game starts, and then the game switches Windows to use standard font smoothing, which works well with the TrueType font Lucida Console if you chose that for your console window, and has no effect if you are using a raster font. Then when you exit the game, the backed up settings are restored (so whatever your previous setting was, whether it was ClearType on, standard font smoothing on, or all font smoothing disabled, that previous setting gets restored). Additionally, since ClearType only exists in Windows XP and later, all of the ClearType-related code is ignored by the compiler on non-Win32 platforms such as Linux and Mac OS X, so this does not affect compatibility with those operating systems one bit. Furthermore, if you are on a Win32 operating system and have selected the "fixcleartype" option in init.txt, the game looks at your Windows version, and if it is older than Windows XP (version 5.1), all the ClearType-related code is disabled, to maintain compatibility with older versions of Windows. The only issue with the "fixcleartype" option is that, although the game only temporarily changes your font smoothing settings to be standard font smoothing, if the game crashes or if you terminate it in any way other than exiting through the game's keyboard interface, the code that restores your backed up font smoothing settings does not get executed. For this reason, "fixcleartype" is disabled by default. However, for users who choose a TrueType font like Lucida Console for the console display in Windows XP or later, the "fixcleartype" feature may prove to be a valuable workaround for the aforementioned bug in ClearType that Microsoft refuses to fix.

The bold text is the stuff you need most, and the thing anyone reading your notes are most looking for. If you do want to add an extensive discussion of the changes, make sure to put a summary of the actual changes at the top in summary, then separately, preferably with some whitespace in between, add the discussion and elaboration. Posting a wall of text with the actual changes buried in the middle makes it much more difficult for someone to skim over change logs to determine what has actually changed from version to version, which is what commit notes are supposed to convey.

Example much more brief commit message for the same change:

Quote
Added an init.txt option to tell Windows to use non-ClearType font smoothing

Enabling the init.txt option "fixcleartype" will cause the game to instruct Windows to use standard font smoothing instead of ClearType. This fixes a display bug with Windows' ClearType smoothing, in which TrueType fonts like Lucidia Console do not display correctly on some screens, showing vertical lines during full screen animations and in the newspaper. If the game exits correctly, it will revert the settings to the same as Windows had prior to the game starting up. This option is disabled by default and has no effect on other platforms, or older versions of Windows without ClearType.

82
Curses / Re: Some questions about the code
« on: August 20, 2013, 04:08:34 pm »
Thank you Jonathan S. Fox ! By the way do you have an idea about this accent problem ?

I concur that unicode support is required, and also don't know the best way to go about accomplishing that.

83
Curses / Re: Some questions about the code
« on: August 20, 2013, 03:52:40 pm »
I made some change in the code and I need to know if this is gonna work.

Code: [Select]
clearmessagearea();
            set_color(COLOR_CYAN,COLOR_BLACK,1);
            move(16,1);
            addstr(activesquad->squad[p]->name, gamelog);
            switch(encounter[0].type)
            {
            case CREATURE_COP:
            if (activesquad->squad[p]->gender_liberal == GENDER_FEMALE) addstr(" est saisie, ", gamelog); //The original string was : is seized
            else addstr(" est saisi, ", gamelog); //I will consider the intersex gender as a male

The compilation is ok but this will really return the gender of this liberal "activesquad->squad[p]->name" ? And are there other ways to get the gender of a liberal ?

That looks precisely correct to me.

84
Curses / Re: National LCS Revisited
« on: August 14, 2013, 11:43:45 pm »
If you are gonna use !!MAJOR!! cities, you might want to familiarize yourself with some geography. Case in point, Long Island is not a city. It is a massive landmass in New York. Might want to change Long Island to Islip or something, or just cross it out entirely.

Also, for New York, a bunch of suggestions. Central Park should be massive. Or just use Battery Park if you are lazy. Definitely change university district to Greenwich Village or Soho. Cable News Network can become NBC Studios at Rockefeller Center. Latte stand could become a street vendor. (Nothing says New York like hot dogs, kebabs, and knish!) Make the Statue of Liberty and Ellis Island infiltratation sites as well, with raids there bringing incredible amounts of heat and juice for anything. Prison should be Rikers Island. Possibly Governor's Island as well for a really neat abandoned safehouse. (Fun fact: Comes with some several hundred year old forts! Also, it was basically abandoned in 2009, except for a couple of Nation Park Services tours.)

Finally, new mechanic: boats. To visit any of the island locations: (Statue of Liberty/Ellis Island/Etc.), you should have to jack a boat instead of a car. Basically, just duplicate the car mechanics but make them usable only for locations accessible by water. Speedboats would be ideal, but just as a joke, add slow-ass rowboats with no escape chance for epic, high-octane, and downright impossible to survive rowboat chase scene action.

Appreciate the suggestions, I had a lot of trouble laying out cities logically and appreciate a degree of local awareness (my only first-hand experience is with Seattle, which ironically is the city that the game is based on normally). As for Long Island, I'm not that ignorant of the geography. :P As a subheader under NYC, I was talking about Brooklyn and Queens, and not trying to depict "the City of Long Island" or something like that. I agree that it's too vague though, and I think I did change the name to be more specific when coding it.

85
Curses / Re: CCS Not disbanding
« on: August 12, 2013, 02:53:49 pm »
Having the same issue, killing them at the de bar and grill doesnt work killed probably 20 ccs and at least 50 "vigilantes" (police) that arrived. Not sure. :/

Killing the lieutenant worked but it forced me into an encounter that caused some heavy casualties. Bug?

The way you capture the bar and grill is by killing the lieutenant.

86
Curses / Re: Raising Computer Skill Legally
« on: August 09, 2013, 06:42:01 pm »
I know, I know, hacking is a serious crime, but whatever, as long as you stay in your hideout and there aren't any raids on it you'll be fine, plus hacking doesn't generate any heat so it's not really that dangerous, just don't have your Founder do it, since it's best to keep the Founder out of trouble unless you already have a juiced-up replacement leader ready to take over at a moment's notice.

I think hacking gives quite a bit of heat, but only if you don't pass the "cover your tracks" skill checks. There are some famous historical raids on hackers and even not-actually-hackers, so it would be a shame for the game to not give heat for hacking.

87
Curses / Re: National LCS Revisited (4.07.3 Beta Release!)
« on: August 09, 2013, 06:25:21 pm »
When I read this, the first thing I thought was it was a spambot that latches on to anything mentioning bugs. Anyways, thanks for the fix. Gotta wonder what JSF is up to right now.

I'm alive and kicking, got a bit burned out while working on LCS so much over the last couple months. I'm taking a break, which may be short or medium. It won't be endless. Part of me would like to rush the rest of the National LCS features into place, but I know I'll just burn out more and becoming increasingly unproductive if I try to force myself to do that, so I've decided to kick back and work on another project for the time being.

Right now I'm studying engine architecture to improve my skills in an area where I didn't get the proper training in college. That was my own fault; DigiPen provides great instruction in that, but I didn't take it. I'm currently working to fix this and gain an increased mastery over the technical structure, the architecture and engineering, of games as software.

Also, this thing, which may or may not ever become anything:



Character art by David E. Gervais. The blue dots are projected movement of the swordsman in order to avoid the rough terrain, and the illuminated area is the possible movement range of the swordsman, taking into account terrain.

88
Curses / Re: New option for Random Number Generator
« on: August 09, 2013, 05:47:16 pm »
If you have been releasing Debug builds to the public, perhaps they have been Debug builds made in Microsoft Visual C++ rather than Code::Blocks with the GCC compiler, because creating Debug builds with the GCC compiler results in a very large file size. I have also read that, for most software projects at least, Debug builds are typically just used by developers, while Release builds are what is released to end users. Also, the traditional practice, at least with the GCC compiler, is to disable all compiler optimizations for Debug builds, because, while compiler optimizations make the game faster and the file size smaller, they make it harder for debuggers to trace things, and debuggers have the easiest time of it if all compiler optimizations are turned off.

Yes, I've been doing it with MSVC++ debug builds, not compiled with GCC. The release builds are a bit smaller.

It's true that normally you do release builds for public releases (which is why they're so named). However, this generally involves much more internal testing. I'm unable to do anything but just play the game myself, and I miss a lot of bugs. In practice, the general public is the testing group for LCS, and releasing debug builds makes it easier to track down bugs people run into.

And yes, turning on optimizations would probably involve doing release builds rather than debug builds.

One last thing, I have experimented with a change to the Random Number Generator that would make it stop being deterministic [...] I'm not sure if you'd approve of this though, since it appears that the Random Number Generator being deterministic is by design and was done that way on purpose.

RNGs in computers are just math functions that take one number and produce another seemingly unrelated number. They aren't random; they're just so chaotic in their mapping that they are effectively random. The way they typically work is that you use the previous randomly generated number as the seed (or input) for the next one. To get the initial seed, you draw on something like the current time.

One side effect of using the output of the function to seed the next call of it is that the RNG produces deterministic sequences, where every roll precisely predicts the next one. Since the function is producing numbers anywhere in the range of billions of numbers, you'll never notice this happening; it's pure random as far as the player is concerned. The only impact it really has is that it allows you to reproduce the same random rolls if you save the seed at some point and reuse that seed. There are a couple cases where this is useful.

1) Procedurally generated content can be stored by saving only the seed used by the RNG when generating the content. For example, many of the buildings in LCS are consistent in their layout with every visit, even though they're randomly laid out, and their layout isn't stored in memory anywhere. This is because we store the seed used to generate the building, and use it each time, relying on the deterministic nature of the RNG to produce the same building. When we want to generate a different building, we just change the initial seed, and we get a new building. If we want to let the player alter a building, like spraypainting a wall, all we need to do is store a list of the changes made (eg, at coordinates 5x17 the player sprayed tags on the walls), and then apply those changes after regenerating the map.

2) Repeatable bugs that rely on random factors. Sometimes people will give bug reports with a save, and instructions like "go to this location, walk three steps down, one step right, press fight, and the game crashes." This is only possible if you're following the same sequence of RNG rolls with each play, since otherwise the fight would play out differently and different enemies would appear in a different place.

3) Minimize the benefit of savescumming. This isn't as relevant for LCS, but in a game like Civilization, keeping the RNG from producing different rolls when you save and load will ensure that the player can't just save before a really low odds fight, try it, load when it goes badly, fight again, load again, and repeat this exercise until they win the battle by sheer dumb luck. The save/load process is cheating, and more importantly, it's not fun for most people. If it can be done, many people will do it, despite it being a frustrating and slow process. With the seed saved alongside the game state, this trick doesn't work, so people won't be tempted to torture themselves by trying to use it. (You can savescum and make different choices, but you can't do it just to cheese the RNG.)

For these reasons, it is standard and best practice to keep the RNG seeding itself based purely on the results of the last roll. That doesn't mean it's any less random than otherwise; in truth, the approach you're taking is deterministic as well, it's just that successive rolls are determined not only by the previous rolls, but also on the time that the previous rolls were made, which is an uncontrollable factor. That doesn't make the results more random (time is no more truly random than the results of the last RNG roll), but it does mean you're "salting" the generator with external factors that prevent you from repeating the same sequence of rolls twice. Since repeatable sequences is actually a really useful thing, it's best to let the generator reseed itself purely based on the results of previous rolls.

In revision 697, I fixed a bug where if one of your Liberals went to a different city but had meetings and/or dates scheduled with people in their previous city, they would still be able to continue meeting with and dating people in the old city while simultaneously being in the new city (this was in "daily.cpp" in the "daily" directory). Now, when a Liberal moves to a different city, all their existing meetings and dates are canceled.

In revision 698, I fixed a bug where it didn't display the full name of each location (namely, it left out the city at the end) when you were in the moving equipment screen that lets you move equipment between bases. So now you can tell which city's Shelter your equipment is at, if it's at a Shelter, for instance. This was in "equipment.cpp" in the "common" directory.

Thanks for shoring up some of the National LCS stuff! These features aren't truly finished, but you're helping to get them closer to done.

In revision 699, I added display of the current city to site mode and to dates. Also, since there is so much horizontal room in the top line of the screen in site mode, it displays the full name of the city in site mode, not just a 3-letter abbreviation like everywhere else.

I'd just make sure that space isn't needed for the "conservative response incoming" notifications at the top of the screen. They only display some of the time, and they take up a lot of space in that area!

In revision 700, I alphabetized the list of skills in "creature.h", so that when you look at the Profile of a Liberal and press up or down to see all the skills, they'll be in alphabetical order (and of course compiled and built it into Release and Debug builds of "crimesquad.exe" again).

In revision 701, I alphabetized the list of crimes in "includes.h", so that when you look at the Profile of a Liberal and press up or down to see all the crimes they committed, they'll also be in alphabetical order too. And I compiled both builds, yet again.

I'm not sure if this is an improvement or not; I see benefits and drawbacks. The skills in particular were in a sort of loose logical order, so combat skills were clustered together on the skills screen, for example. Alphabetized will make it easier to look up specific skills you're interested in, but removes any spacial grouping of skills on the screen.

89
Curses / Re: An ASCII-based "Zombie Survival Squad"
« on: August 04, 2013, 11:06:20 pm »
2. john are you still making this or are you no longer? or are you just taking a break from ZSS for a bit?

I'm currently not actively working on it now, but might again if I get into the mood for it!

90
Curses / Re: Fixes for Code::Blocks IDE
« on: August 04, 2013, 05:00:45 pm »
Hey, you should be added to the project and given commit rights, and thank you! I love it when people deal with issues that I've missed, and what I really love is when you make it easy on me and I don't have to manually apply changes other people make. ;)

The only difference from the previous code is the addition of the one line of code
Code: [Select]
      case CREATURE_SECRET_SERVICE:strcat(str,"Secret Service");break;
into the function. It actually doesn't matter where in the list it is, as long as it comes before the last item, the default, which HAS to be last (I am sure all the other programmers here know that already though). I put it in as the last one before default but if you'd rather move it elsewhere in the list that would work just as well, it doesn't matter, as long as it's in the list, which it wasn't before.

Thanks for catching this. It really doesn't matter where it is, don't sweat it.

Default doesn't actually have to be last, it just makes intuitive sense that way. It is occasionally useful to have a default earlier in the switch statement: If you leave the final break statement off of any of the cases or the default, they'll "fall through" and execute the commands of the next case as well. If you want the default to do a bit of code and then act like one of the other cases, you can do...

Code: [Select]
switch(myBreakfast)
{
default:
   // Mmm! My meal looks delicious!
   // (fall through)
case GREASE_CAKED_SOMETHING: // Skip the delicious part, these sound gross
case GREEN_EGGS_AND_HAM:
   // I eat until I am full.
   break;
case NOTHING:
   // I am a sad panda. :'(
   break;
}

If you were taught to always put the default case last, that isn't a bad thing. But it's a code quality mandate rather than a requirement of the language.

Well it turns out the reason for this, in the source code, happens to be the source code for when you steal things in apartments... what a coincidence! Anyway, it's a very obvious bug in the code. Basically there are arrays of possible items it could be, and LCSrandom() is called, yet the parameter for LCSrandom() is a higher number than the array size, meaning that sometimes, the array size will be exceeded, which, of course, is something that crashes a program in C++.

Cool, thanks for catching this, and in two different cases.

Previously, initfile.cpp didn't remove whitespace (spaces and tabs) before or after the text in each line of the init.txt file that was being parsed. Now it does, so if you have spaces or tabs to the left or right of the various lines (currently the 2 variables that get specified in that file are called "pagekeys" and "autosave"), now those spaces and tabs get ignored and initfile.cpp correctly parses them. In addition, it used to check for "off", "0", or "false" for the "autosave", but not "no". I have added a check for the word "no" (so now it checks for "off", "0", "false", or "no").

Thanks for fixing this.

I have noticed that if I compile Liberal Crime Squad in Code::Blocks with the compiler optimizations all enabled (like I did in the modified "game.cbp" file that is posted in my previous post), the game goes through computationally intensive tasks like many days going by and processing every event that happens, it does this all MUCH faster than in the 4.07.3 beta build downloadable from Jonathan S. Fox's website. Yes, it makes the game run MUCH faster. It's really awesome.

Neat; I usually end up releasing debug builds since they give marginally better bug reports and tend to crash sooner when there's a game breaking bug, which helps to ensure you don't corrupt your game by running over an array and writing all over memory without the game noticing. But if it makes a very noticeable difference in the speed of certain parts of the game, I'll look into turning on/up the amount of compiler optimization when I do releases in the future.

Pages: 1 ... 4 5 [6] 7 8 ... 249