|
Physician
United States4146 Posts
http://ossguy.com/starcraft_power_saver/ by ossguy
I haven't tried it yet. I don't think many will be using it but who knows, someone out there might find it useful.
Basically it's a tool that patches StarCraft so it uses less CPU time while a game is being played, which reduces power consumption on your computer.
Performance results StarCraft Power Saver reduces StarCraft's CPU usage from 100% to the following percentages:
* 1-4% on a 2.8 GHz Pentium 4 running Windows XP SP2 * 2-10% on a 1.3 GHz Pentium M running Windows XP SP2 * 25-75% on a 1.3 GHz Pentium M running Wine 0.9.58 on Ubuntu 7.10 + Show Spoiler +StarCraft Power Saver What you should know about StarCraft Power Saver:
* It's a tool that patches StarCraft so it uses less CPU time while a game is being played, which reduces power consumption on your computer. * It modifies the StarCraft executable. As a result, you should not use Battle.net once the patch is applied (you can revert to a backup if you like). * It's designed for StarCraft 1.15.2. If you have an older version, please update to 1.15.2 before using it. * It's run from the command line. To use it, open a Command Prompt and navigate to the folder it's in. Then type starcraft_power_saver "C:\Program Files\Starcraft\StarCraft.exe" to apply the patch. A backup of the executable will be created. * It wasn't created by and is not supported by Blizzard Entertainment. * It's only available for Windows (and, by extension, Wine) for now. If there is enough interest, I will consider adding a Mac version. * The tool and source code are linked below. They can also be browsed using this link. * Bug reports and feature requests are welcome. Please submit these using the contact information below.
Before you judge it too fast (like I did) read the Problem summary.
|
Physician
United States4146 Posts
|
how to use it @@ i tried, didint work
|
'E:\Starcraft\Starcraft.exe' is not a StarCraft: Brood War 1.15.2 executable; th e expected MD5 checksum is 8f35e0719fa15e56b6605e67b19ba97c
|
Osaka27136 Posts
If it worked on battle.net it would be worthwhile for me, but I dont spend any time in single player. Rich's is much less circumspect, as it doen't actually modify bw.
|
Yeah, I'd say Rich's is a lot better (and is a BWL plugin so its even easier to turn on/off )
|
On March 31 2008 18:57 syplovessy wrote: 'E:\Starcraft\Starcraft.exe' is not a StarCraft: Brood War 1.15.2 executable; th e expected MD5 checksum is 8f35e0719fa15e56b6605e67b19ba97c
Thanks for reporting that. Are you using an English version of StarCraft 1.15.2? If not, it's quite likely that the patch won't apply properly. I'll consider adding support for other languages if there is enough interest.
|
On March 31 2008 19:52 Manifesto7 wrote: If it worked on battle.net it would be worthwhile for me, but I dont spend any time in single player. Rich's is much less circumspect, as it doen't actually modify bw.
Fair enough. I didn't know about CPU Savior before I started making StarCraft Power Saver and I wasn't aware of other ways of making a similar patch. I will look into CPU Savior a bit more to see how it works so I can determine how StarCraft Power Saver compares to it. If they are sufficiently similar, then StarCraft Power Saver may be redundant.
To clarify, StarCraft Power Supply does not limit you to single player. You can also play LAN games with it, just not Battle.net. Mainfesto7 probably knows this, but it might be unclear to other users reading this thread.
|
Physician
United States4146 Posts
On April 01 2008 01:41 ossguy wrote:Show nested quote +On March 31 2008 19:52 Manifesto7 wrote: If it worked on battle.net it would be worthwhile for me, but I dont spend any time in single player. Rich's is much less circumspect, as it doen't actually modify bw. Fair enough. I didn't know about CPU Savior before I started making StarCraft Power Saver and I wasn't aware of other ways of making a similar patch. I will look into CPU Savior a bit more to see how it works so I can determine how StarCraft Power Saver compares to it. If they are sufficiently similar, then StarCraft Power Saver may be redundant. To clarify, StarCraft Power Supply does not limit you to single player. You can also play LAN games with it, just not Battle.net. Mainfesto7 probably knows this, but it might be unclear to other users reading this thread.
we are happy just by the mere fact you're around here and made the effort for our game : )
|
Man I was hoping for a SC screen saver with customizable replays to play and auto screen scroll for hottest actions...
|
I wish Blizz would somehow implement this.
|
I'm curious if ossguy has written other bw software. Have you?
|
Your technique looks better - just sleeping once per loop (CPU Savior sleeps on every GetTickCount call), but Sleeping at all is a problematic method since it stalls the message loop, meaning high Hz mice might suffer from input latency. You can reduce the 10-15ms granularity with a timeBeginPeriod call as CPU Savior does. CPU Savior patches the IAT to avoid modifying BW code, but modifying BW code after connecting to bnet should be fairly safe unless Warden decides to go after you, meaning this would work well as a BWL plugin - no injection needed, just Read/WriteProcessMemory.
|
On April 01 2008 11:14 comabreaded wrote: I wish Blizz would somehow implement this.
So do I. It would require a bit of a redesign of their game loop, but it is still a manageable fix. In my opinion, a proper redesign of the game loop would look like the following:
setTimer(...); while (gameNotOver()) { GetMessage(lpMsg, ...); switch (lpMsg.message) { case KEYBOARD_EVENT: ... case MOUSE_EVENT: ... case TIMER_EVENT: redrawScreen(); computeAI(); resetTimer(); ... case ... } }
StarCraft would use the timer to tell it when to redraw the screen. The timer frequency would specify how many frames per second StarCraft would run at. This could be configurable in the game or hardcoded to a particular value that runs well on most systems.
I'd be happy to talk about this proposal further, especially with people from Blizzard.
|
On April 01 2008 11:22 thunk wrote: I'm curious if ossguy has written other bw software. Have you?
The other StarCraft-specific software I've written was made primarily for testing and benchmarking to see how effective the patch was. I did write a patch for Wine that allows users to specify a refresh rate since Wine sometimes picks a low refresh rate when games like StarCraft change the resolution. More information about the patch, including how to use it, are available on my blog. If you just want to use it, you can skip the first two paragraphs.
The benchmarking tools I made let me know how many times StarCraft is going through the game loop in a given amount of time. I did this by inserting a counter in the game loop and then using ReadProcessMemory from another application to see the value of the counter as it changed while StarCraft was running. Making ReadProcessMemory work required disabling some of StarCraft's security features. Because of that and because I used the same method of modifying StarCraft (changing the StarCraft executable directly), these changes also would not work with Battle.net.
In general, I try to stay away from making fixes to closed source software such as StarCraft because it is much more time-consuming than making fixes to open source software and it is much harder to fix things "the right way" since I have to guess what the assembly code is trying to do. It would be much easier for me to make changes to StarCraft if it were open source, but the model that Blizzard Entertainment chooses to sell its products doesn't permit that.
|
seriously, everytime i run broodwars my cpu temperature spikes, even though it's a 10 year old game... =(
|
On April 01 2008 12:20 R1CH wrote: Your technique looks better - just sleeping once per loop (CPU Savior sleeps on every GetTickCount call), but Sleeping at all is a problematic method since it stalls the message loop, meaning high Hz mice might suffer from input latency.
Certainly. If I had more time, I would try to modify StarCraft using an event-based game loop as I described above, but it's just not feasible without the source code as I would have to spend many hours just figuring out how to refactor the code to make the event-based system work. It's unfortunate we have to rely on Sleep when there are much better ways of doing it.
You can reduce the 10-15ms granularity with a timeBeginPeriod call as CPU Savior does.
I considered doing this, but I wasn't sure if it would work because I couldn't find any references to other functions in the winmm library, suggesting that it wasn't linked into the StarCraft executable so I wouldn't be able to use timeBeginPeriod. Furthermore, it appeared that StarCraft worked fine even with the 10-15ms granularity so I didn't see a need to fix it further. However, if there are reports that StarCraft Power Saver is slow without timeBeginPeriod, then I would consider implementing it.
I couldn't find the place where you call timeBeginPeriod in your code; can you point out where in the code that's done?
CPU Savior patches the IAT to avoid modifying BW code, but modifying BW code after connecting to bnet should be fairly safe unless Warden decides to go after you, meaning this would work well as a BWL plugin - no injection needed, just Read/WriteProcessMemory.
That's an interesting mechanism for patching the game. I wish such hackery weren't required. It's things like this that really make me want to switch to open source RTSes like Bos Wars, Globulation 2, or Dark Oberon. If I have a problem with any of these, I can just fix the source code the right way. Unlike with StarCraft, no reverse engineering or protection-circumventing hacks are required.
|
On April 02 2008 13:07 Gokey wrote: seriously, everytime i run broodwars my cpu temperature spikes, even though it's a 10 year old game... =(
It's partly because StarCraft is 10 years old that it uses the CPU the way it does. 10 years ago, people didn't care that much about saving power because the average computer wasn't that power-hungry and laptops were not nearly as ubiquitous as they are today.
I would encourage you to try StarCraft Power Saver and CPU Saver to see if they help with your CPU temperature issues. Ideally Blizzard would fix this the right way, but until then, all we can do is work around it.
|
Baltimore, USA22251 Posts
On April 01 2008 12:20 R1CH wrote: Your technique looks better - just sleeping once per loop (CPU Savior sleeps on every GetTickCount call), but Sleeping at all is a problematic method since it stalls the message loop, meaning high Hz mice might suffer from input latency. You can reduce the 10-15ms granularity with a timeBeginPeriod call as CPU Savior does. CPU Savior patches the IAT to avoid modifying BW code, but modifying BW code after connecting to bnet should be fairly safe unless Warden decides to go after you, meaning this would work well as a BWL plugin - no injection needed, just Read/WriteProcessMemory.
I'm ashamed to say I understood virtually none of that. 
How did both of you guys get into coding, if you don't mind me asking?
|
On April 02 2008 13:26 EvilTeletubby wrote:Show nested quote +On April 01 2008 12:20 R1CH wrote: Your technique looks better - just sleeping once per loop (CPU Savior sleeps on every GetTickCount call), but Sleeping at all is a problematic method since it stalls the message loop, meaning high Hz mice might suffer from input latency. You can reduce the 10-15ms granularity with a timeBeginPeriod call as CPU Savior does. CPU Savior patches the IAT to avoid modifying BW code, but modifying BW code after connecting to bnet should be fairly safe unless Warden decides to go after you, meaning this would work well as a BWL plugin - no injection needed, just Read/WriteProcessMemory. I'm ashamed to say I understood virtually none of that.  How did both of you guys get into coding, if you don't mind me asking? Me too T.T After using chaos launcher it got me interested but i have no idea what they're talking about;;
|
I was thinking of switching to a linux box, but sc was actually a deciding factor. I'll look into your blog.
For EvilTeletubby -> the answer is starcraft. They saw BoxeR play and they were like...damn...I wanna code brood war plugins.
I'm actually wondering the same thing though.
|
On April 02 2008 13:37 thunk wrote:I was thinking of switching to a linux box, but sc was actually a deciding factor. I'll look into your blog. For EvilTeletubby -> the answer is starcraft. They saw BoxeR play and they were like...damn...I wanna code brood war plugins. I'm actually wondering the same thing though.
maybe they just enjoy coding? either way im glad they do it its awesome for the rest of us!:-D
|
I got the source code for ChaosLauncher, but I was wondering if there is a reference documents somewhere.
What software do people use to compile the dephile\pascal code? I can write very basic ASM, but how much assembly would I need to know? I use to write only in DOS enviroment with pascal code and an inline assembly.
|
|
On April 02 2008 13:26 EvilTeletubby wrote: How did both of you guys get into coding, if you don't mind me asking?
I started coding around Grade 8 or Grade 9. My first language was (unfortunately) Visual Basic, but I quickly moved into C++. I started coding simple programs that would do math I had recently learned like calculating the length of the hypotenuse of a right-angle triangle given the lengths of the other two sides. I also wrote programs to organize some of the data coming from my broadband router, namely the number of accesses per port in a day. I learned most of my C++ from experimentation, high school programming classes, and books like Sams Teach Yourself C++ in 21 Days.
More recently, I have been learning how to code through courses at the University of Waterloo and working on open source projects such as the Linux kernel, GNU wdiff, and Wine. While much of my knowledge has come from formal education, all of it could have been picked up from elsewhere.
To be a coder, it's good to have an analytical or mathematical mind otherwise you probably won't enjoy it. To get started, I would suggest getting a C or C++ book and then reading the source code for a simple project like Gnome Mines. I would highly recommend installing a distribution of GNU/Linux for programming. It's much easier to get development tools for GNU/Linux than for Windows or Mac OS.
I recommend getting involved in some open source projects if you want to learn how to code. Pick a project you like and get on the developers' mailing list. It's probably best to get involved with a smaller project than with something like Firefox or the Linux kernel at first.
I have primarily described coding resources for C and C++. These are most useful for those that eventually want to work on something like StarCraft. But there are lots of other areas of programming that are equally as useful. A big field today is web programming, using JavaScript, PHP, Ruby, and Python to name a few. If you like the language to do the work for you, you might want to start there. Also, Python is being used increasingly for non-web applications, such as those on the OLPC.
I can try to answer specific questions about coding, but my time is somewhat limited. If someone wants to start a new thread on coding and there is interest, we could continue these sorts of discussions there.
|
On April 02 2008 13:37 thunk wrote: I was thinking of switching to a linux box, but sc was actually a deciding factor. I'll look into your blog.
I've been running StarCraft exclusively on GNU/Linux for a while now. I had some performance problems at first, but I fixed them by using these instructions (see UsefulRegistryKeys for how to update these keys). Now it's running problem-free.
If you have any questions about running StarCraft on GNU/Linux through Wine, I can probably help.
|
On April 03 2008 05:44 [X]Ken_D wrote: I got the source code for ChaosLauncher, but I was wondering if there is a reference documents somewhere.
What software do people use to compile the dephile\pascal code? I can write very basic ASM, but how much assembly would I need to know? I use to write only in DOS enviroment with pascal code and an inline assembly. You use Delphi to compile Delphi code You can get a free (and legal! but a tad bit limited, although it should be fine for your usage) off of http://www.turboexplorer.com/delphi
|
On April 03 2008 02:15 GoSuPlAyEr wrote:Show nested quote +On April 02 2008 13:37 thunk wrote:For EvilTeletubby -> the answer is starcraft. They saw BoxeR play and they were like...damn...I wanna code brood war plugins. I'm actually wondering the same thing though. maybe they just enjoy coding? either way im glad they do it its awesome for the rest of us!:-D
The reason I did it was primarily because I was frustrated that StarCraft was wasting power (particularly on my laptop where wasting power means reducing battery life) and making my CPU fan spin furiously. I could have just fixed it for myself, but it only requires a little more work to make my patch available to anyone so I did that.
I also made the patch because I like a challenge and I knew a bit about how to fix it. It definitely required me to expand my knowledge, especially on how to use a debugger and how to analyze a program without high-level source code.
|
On April 03 2008 05:44 [X]Ken_D wrote: I got the source code for ChaosLauncher, but I was wondering if there is a reference documents somewhere.
Are you interested in writing your own plugin? If so, what sort of plugin do you want to write? I haven't used ChaosLauncher so I can't help you with the reference documents, but I could help you with general knowledge of how StarCraft works.
I can write very basic ASM, but how much assembly would I need to know?
It really depends on what you're doing. I had some knowledge of x86 assembly before writing StarCraft Power Saver, but I had to learn a lot more to write the patch. You may want to write some simple programs then compile them and disassemble them to learn assembly. I suggest using IDA Pro Freeware. It's got a lot of neat features, including graphing, which is extremely helpful when trying to understand assembly code.
|
On April 03 2008 08:56 il0seonpurpose wrote: Man, no bnet?
No. You can blame Blizzard and players that cheat for that.
Blizzard has an obligation to make games fair for everyone and when people cheat on Battle.net, Blizzard must choose between allowing cheating (which makes some people upset) and adding "protections" to their games so that they are harder to modify for cheating purposes. Blizzard has chosen to add "protections". Unfortunately, it is impossible to differentiate between modifications done for cheating purposes and modifications done to make StarCraft use less CPU power so by adding "protections", Blizzard has made it much harder for people like me and R1CH to legitimately fix their games when they're broken.
If you don't want Blizzard to do this, first and foremost do not cheat. Fewer people cheating means less reason for Blizzard to add "protections" to their games. Secondly, speak up on forums when there are problems. If StarCraft is consuming too much power or doesn't work natively on GNU/Linux, brings this up on forums (especially the official Battle.net forums) and sign a petition if there is one. As an example, there is a petition to add GNU/Linux installers for Blizzard games you can sign. Doing this will make Blizzard aware of what features and fixes people want.
If you want similar functionality to StarCraft Power Saver and want to use Battle.net, try out R1CH's CPU Savior (or Saver). It's discussed on another thread.
Be aware that when modifying StarCraft in any way, there is always a chance that Blizzard will prevent you from using Battle.net (see the ChaosLauncher announcement). It just happens that Blizzard has chosen to disallow the type of modification that StarCraft Power Saver uses but has not (yet) disallowed the type of modification that ChaosLauncher (and CPU Savior) uses.
|
On April 04 2008 01:55 ossguy wrote:Show nested quote +On April 03 2008 05:44 [X]Ken_D wrote: I got the source code for ChaosLauncher, but I was wondering if there is a reference documents somewhere. Are you interested in writing your own plugin? If so, what sort of plugin do you want to write? I haven't used ChaosLauncher so I can't help you with the reference documents, but I could help you with general knowledge of how StarCraft works. It really depends on what you're doing. I had some knowledge of x86 assembly before writing StarCraft Power Saver, but I had to learn a lot more to write the patch. You may want to write some simple programs then compile them and disassemble them to learn assembly. I suggest using IDA Pro Freeware. It's got a lot of neat features, including graphing, which is extremely helpful when trying to understand assembly code.
Disassembly, that sounds like a nightmare for me.
I wish I am able to modify ChaosPlugin autoreplay saver to include replay with text and not save before 2 minutes. ADVLoader can do that, but I don't like the way replay number already has a set number instead of looking at the last file number. I often get corrupt replays with ADVLoader.
In reality, I would have to start off something really simple such as make ChaosPlugin not save before 2 minutes
|
On April 03 2008 08:56 il0seonpurpose wrote: Man, no bnet?
I forgot to mention this in my last post:
You can use StarCraft Power Saver with Internet games, just not through Battle.net. There are applications such as Gamer's Internet Tunnel that will make people able to see your LAN games over the Internet. This probably isn't an option for competitions, but for your average recreational game of StarCraft over the Internet, it should work fine.
Of course, people will be able to cheat more easily when using this setup than with Battle.net, but allowing StarCraft modifications is the whole point and one can't distinguish between modifications made for cheating and modifications made for improving the game. Just make sure you're playing with people you trust not to cheat and you'll be fine.
|
On April 04 2008 02:19 [X]Ken_D wrote:Show nested quote +On April 04 2008 01:55 ossguy wrote:On April 03 2008 05:44 [X]Ken_D wrote: I got the source code for ChaosLauncher, but I was wondering if there is a reference documents somewhere. Are you interested in writing your own plugin? If so, what sort of plugin do you want to write? I haven't used ChaosLauncher so I can't help you with the reference documents, but I could help you with general knowledge of how StarCraft works. I can write very basic ASM, but how much assembly would I need to know? It really depends on what you're doing. I had some knowledge of x86 assembly before writing StarCraft Power Saver, but I had to learn a lot more to write the patch. You may want to write some simple programs then compile them and disassemble them to learn assembly. I suggest using IDA Pro Freeware. It's got a lot of neat features, including graphing, which is extremely helpful when trying to understand assembly code. Disassembly, that sounds like a nightmare for me. I wish I am able to modify ChaosPlugin autoreplay saver to include replay with text and not save before 2 minutes. ADVLoader can do that, but I don't like the way replay number already has a set number instead of looking at the last file number. I often get corrupt replays with ADVLoader. In reality, I would have to start off something really simple such as make ChaosPlugin not save before 2 minutes  You'd pretty much have to write a completely new plugin to add RWT, btw ChaosPlugin just deals with LastReplay.rep once its been saved, and adding RWT means modifying the replay save functionality with Starcraft. If you want to get started with some simple disassembly stuff with starcraft though, just let me know, I'd be happy to help you out
|
Germany2896 Posts
This thread got quite offtopic  Almost all info available about Chaoslauncher/BWLauncher4 is found here: http://www.bwprogrammers.com/modules.php?name=Forums&file=viewtopic&t=1071 A good replay with text(which saves the text inside the replay) is hard to code. A simple one, which just reads the strings from memory and saves them to a textfile is doable. The 2minute thing would be easy if you had the source for RepAnalyzer.dll, but I forgot to include that one. Basically all things Chaosplugin can do are very simple and do not require disassembling SC.
As free IDEs I'd recommend either Turbo Delphi Explorer or Visual Studio Express (or if you have access to MSDNAA Professional)
|
On March 31 2008 18:57 syplovessy wrote: 'E:\Starcraft\Starcraft.exe' is not a StarCraft: Brood War 1.15.2 executable; th e expected MD5 checksum is 8f35e0719fa15e56b6605e67b19ba97c
Same problem here. I'm using a german copy of starcraft, guess that's the problem!?
Edit: So the MD5 checksum of my (german) Starcraft.exe is af031ff7d41610c08a00d28d112965c2. You maybe want to add it to the code.
|
On April 09 2008 02:19 Homeless wrote:Show nested quote +On March 31 2008 18:57 syplovessy wrote: 'E:\Starcraft\Starcraft.exe' is not a StarCraft: Brood War 1.15.2 executable; th e expected MD5 checksum is 8f35e0719fa15e56b6605e67b19ba97c Same problem here. I'm using a german copy of starcraft, guess that's the problem!? Edit: So the MD5 checksum of my (german) Starcraft.exe is af031ff7d41610c08a00d28d112965c2. You maybe want to add it to the code. 
Unfortunately, I can't just add the MD5 checksum without first checking to see if the same method of patching would work on the German StarCraft executable. If I just added the MD5, it is possible that the patch would cause a German version of StarCraft to crash because the German StarCraft executable might be organized differently than the English StarCraft executable.
So if I had a German StarCraft executable, I could add support for the German version of StarCraft to StarCraft Power Saver. However, I don't own a German version of StarCraft and the license you agree to when you install StarCraft prevents you from sharing your StarCraft executable with me. If you e-mailed Blizzard Entertainment and received written permission from them to give me your German StarCraft executable, then you could send me your German StarCraft executable and I could add support for the German version of StarCraft to StarCraft Power Saver. You could also buy a second copy of the German version of StarCraft and send it to me. Please don't send me your StarCraft executable unless you can prove you have the legal right to do so.
The above applies to any non-English version of StarCraft, not just German. I would be happy to add support for other languages if you follow the above instructions. I admit the steps are time-consuming, but I'm afraid I don't have the time or the money to follow through on them myself. I will always accept help from the StarCraft community, though.
|
Germany2896 Posts
If you only patch some places in the code and don't change the structure of the .exe, you could check the code which is near your patch, instead of hashing the whole file. And I'm quite sure that the code section is identical for all SC-Versions.
|
wow, finally, someone else who uses ubuntu + wine!
is there any way to get chaoslauncher + Power Saver / CPU Savior running on wine + ubuntu? i tried chaoslauncher and it gave me weird errors. 
|
|
|
|