So for the last two weeks, I've been out of the house.
The first week was spending time with the step brothers at my dad's house.
Now, halfway through the second week, I'm ankle deep in floppy disks from the 80's cleaning out the study of a packrat grandparent who's passed on.
On the second day here, my grandmother gave me one of her old laptops. Through the night (til about 3 am), I was installing different versions of Linux to try and breath some life into the old machine that previously used Windows 2000. I wanted something lightweight that could be used as a NAS and server. The first thing I tried was Jolicloud. In my own opinion, I have to say that it's very overrated. I felt like there was absolutely no point in having it. If you're not connected to the internet, you can't even use it. Then, when you get in, it just provides links to access different websites with their version of Chrome. This chrome that they've supplied doesn't give any access to options, so you can't install addons and such easily. I immediately wanted adblock after clicking some of their shortcuts, luckily it installed fairly automatically. Once you've got passed all that and you're ready to hear things about the OS itself, well it's been made fool-proof. By that, I mean that you don't have any access to the normal things in Linux that are so necessary to get everything working the way you want it. I'm fairly sure I couldn't access the synaptic packet manager, so I couldn't get my wireless card to work at all because I couldn't get ndiswrapper. After about half an hour of playing around with it, it slowed to an absolute crawl. I would have two or three tabs up in chrome and switching between them would take 10+ seconds. (Keep in mind, all of these experiences are relative to the machine I was on). So that was gone after an hour.
I immediately hit the web searching for more Linux distros that would fit my needs.
Along those lines, I found FreeNAS, Xubuntu, Ubuntu, and another one called Mint.
Mint is focused towards media usage. It comes with most of all necessary codecs needed to play the modern files in your library. The only problem with this, is that the computer probably isn't fast enough to really handle these formats... so that's a little pointless to me.
Next up was FreeNAS. The webUI and everything on this distro is wonderful. The only problem, is that the OS itself is meant to be headless. I'm a big fan of everything this OS does, but I don't think I can get around the fact that I can't actually use the computer itself. So that one is out (until I think I actually need to use it's capabilities).
Now, as it sounds by the name, Xubuntu and Ubuntu are fairly similar. Xubuntu is a lighter weight version of Ubuntu and is probably more of what I was looking for, but I ended up going with Ubuntu. The initial decision for this is that Ubuntu 11.04 comes with Unity. Unfortunately, I didn't realize that the laptop wouldn't even be able to utilize it lol. So now it's installed and working great. One of the biggest reasons I'm keeping it is that Ubuntu has the largest community of all linux distros out there, so it will be a lot easier to get support for it if needed.
Reviews over, on to the tutorial!
Ubuntu 11.04 makes it pretty easy to set up the SMB share.
1.) First, right click a folder you want to share and setup sharing
-It should automatically download the SMB, just say yes.
2.) Open up a terminal and type this:
sudo gedit /etc/samba/smb.conf
3.) Everything in here should already look pretty good and work fairly automatically. Go ahead and test that you can access files. If not, you may need to change the workgroup. Now is the time to setup the password!
4.) Search for the area where it says "security = user". This line will most likely have either a # or ; in front of it. This means that the line is commented out. You'll need to remove this commenting to make the line work.
5.) Now, create a new user! This new user is going to act as your credentials for logging into your shared files. Give it a password as such.
6.) Now, open up terminal again. type this: sudo smbpasswd -a <user>
Of course, replace <user> with the name of the account you just made. It will then ask you for a password for the new account.
7.) This should be all you need to do in order to access with a password. When you're connecting with Windows 7, you may need to change some of your settings on the windows side of things to stop the encryption of SMB passwords. To do this, follow the letter steps.
7b.) Winkey + R; type "gpedit.msc" and hit Run. This should open up the Group Policy editor.
Follow the nested folders to Windows Settings>Security Settings>Local Policies>Security Options.
From in here, enable "Microsoft Network Client: Send unencrypted password to..."
Also, change "Network security: LAN Manager authentication level" to "Send LM & NTLM - use..."
These settings will help the password security between windows and linux play nicer with each other.
8.) Now, you should be ready to connect (I left out some things I believe aren't needed at all, if I'm wrong, it's just 2 more steps that I can easily add later)
Open up the network window on Windows 7 and find your computer. You should see the folder you're looking for. Upon clicking it, it should now give you a login window. From here type your credentials like this: "Computername\usernamer" and password as normal. If you don't specify the computer name of the server in the login, then it will think that it should be using a user from your computer and not linux. If you did everything right (and I'm right about not needing those 2 steps), then you should be able to share files!
If you run into any problems like not being able to transfer files to the hdd, try going back to your linux box and changing around the settings on the folder itself. You might find something in permissions that mentions that you only give Read-only access to outside users. So change it around as needed. Enjoy!
Tuesday, May 24, 2011
Sunday, May 22, 2011
Prolonged absence.
What turned out as a week away from my computer has turned into two. It won't be until the end of May that I will be able get to work on anything as my laptop seems to be too slow to run UDK or UnrealEd.
So if you happen to follow me, have patience!
Til then...
So if you happen to follow me, have patience!
Til then...
Thursday, May 12, 2011
Effectively Utilizing the Random Number Generator!
So today (this morning), I felt like it would be a good idea to give a quick once-over of the Random Variables.
If you've never done any programming, you've probably never run into any of these. Well, it's time to learn! If you've ever wanted to easily pick between a set of objects or wait out a random amount of time between fire-offs, then the random number generator is for you!
Example 1: Time usage.
Let's say you've got this awesome background noise that you want to go off every now and then, for no particular reason. Going the next step, you don't want it to happen with a pattern so that your players can figure out it happens every 30 seconds. In order to do this, all we need to do is setup the usual delay. Right click on an empty space and create a new Float Variable. Under the float menu, you'll see Random Float. In the first section of the variable properties, you'll see a minimum and a maximum. This is also known as the range. If you want it to happen every 30s +/- 15, then set you minimum to 15, and your maximum to 45. Easy as that. Now, loop the completion of the event back into the start of the delay and you've got it repeating at random 30 +/- 15.
Example 2: Random Functions.
So maybe you've played a lot of pokemon and you're into the whole "random encounter" situation. Well let's say you built a button. And every time you pressed the button, you had a 1 in 6 chance of being killed. (russian roulette). In order to achieve this, you would set up your kill the player function as usual and hook it up to a comparison INT. The A value would be the Random Int with a range of 1,6. The other value would be whatever you wanted the death number to be. When A == B, death ensues!
That pretty much wraps up the basics of the Random Number Generator. If you have any questions, feel free to comment!
If you've never done any programming, you've probably never run into any of these. Well, it's time to learn! If you've ever wanted to easily pick between a set of objects or wait out a random amount of time between fire-offs, then the random number generator is for you!
Example 1: Time usage.
Let's say you've got this awesome background noise that you want to go off every now and then, for no particular reason. Going the next step, you don't want it to happen with a pattern so that your players can figure out it happens every 30 seconds. In order to do this, all we need to do is setup the usual delay. Right click on an empty space and create a new Float Variable. Under the float menu, you'll see Random Float. In the first section of the variable properties, you'll see a minimum and a maximum. This is also known as the range. If you want it to happen every 30s +/- 15, then set you minimum to 15, and your maximum to 45. Easy as that. Now, loop the completion of the event back into the start of the delay and you've got it repeating at random 30 +/- 15.
Example 2: Random Functions.
So maybe you've played a lot of pokemon and you're into the whole "random encounter" situation. Well let's say you built a button. And every time you pressed the button, you had a 1 in 6 chance of being killed. (russian roulette). In order to achieve this, you would set up your kill the player function as usual and hook it up to a comparison INT. The A value would be the Random Int with a range of 1,6. The other value would be whatever you wanted the death number to be. When A == B, death ensues!
That pretty much wraps up the basics of the Random Number Generator. If you have any questions, feel free to comment!
Friday, May 6, 2011
Creating a Warfare Gametype
This is actually a lot easier than it seems. It's just that the way to set everything up isn't nearly as intuitive as the other gametypes.
Anyway!
First, create your map and save it with the WAR- tag in front of the name, telling the game that it will run on the Warfare gametype.
Make sure to add the necessary pieces to the world. You'll need 2 PowerCore_Content and at least one PowerNode_Content. (They'll be labeled Onslaught, even though that gametype isn't actually supported in this game). Both of these can be found under Actor Classes>NavigationPoint>Objective>UTGameObjective>UTOnslaughtObjective>UTOnslaughtNodeObjective>UTOnslaughtPanelNode>UTOnslaughtPowerCore/node
Now with those in the world, you're ready to connect them. Without connecting them, the game won't know how to use them at all, so this is actually a very crucial step.
Go into View>World Properties. From here, expand the WorldInfo tab and search out the MyMapInfo section. There shouldn't be anything in here yet (unless you've already added something). Click the blue arrow next to it and select UTOnslaughtMapInfo from the dropdown. Now, go down to UTOnslaughtMapInfo and expand it. You should see "LinkSetups." Expand this, then expand the thing directly beneath it. Then expand the NodeLinks section and click the green plus.
From here, it should be pretty straight forward. Expand the [0] (FromNode....) and, with your first core selected, click the green arrow to the very right of FromNode. Now connect the ToNode to your (first/only) node going in between your powercores to the ToNode link. It's essentially going to go on like that until you've connected all the dots... Just think of that one song, "the red core's connected to the - 1st node. The first node's connected to the - second node..." so on and so forth until you hit the enemy team's core. With this done, you may need to go in and test it. It's very easy to mix up which core is which and your blue core might be in your red base.
That's just about all you need to know about the basic functions of Warfare! Come back later and I may go over the different node types and how you can benefit from their use! Go try it out and remember to fix any "core" issues you may run into!
Anyway!
First, create your map and save it with the WAR- tag in front of the name, telling the game that it will run on the Warfare gametype.
Make sure to add the necessary pieces to the world. You'll need 2 PowerCore_Content and at least one PowerNode_Content. (They'll be labeled Onslaught, even though that gametype isn't actually supported in this game). Both of these can be found under Actor Classes>NavigationPoint>Objective>UTGameObjective>UTOnslaughtObjective>UTOnslaughtNodeObjective>UTOnslaughtPanelNode>UTOnslaughtPowerCore/node
Now with those in the world, you're ready to connect them. Without connecting them, the game won't know how to use them at all, so this is actually a very crucial step.
Go into View>World Properties. From here, expand the WorldInfo tab and search out the MyMapInfo section. There shouldn't be anything in here yet (unless you've already added something). Click the blue arrow next to it and select UTOnslaughtMapInfo from the dropdown. Now, go down to UTOnslaughtMapInfo and expand it. You should see "LinkSetups." Expand this, then expand the thing directly beneath it. Then expand the NodeLinks section and click the green plus.
From here, it should be pretty straight forward. Expand the [0] (FromNode....) and, with your first core selected, click the green arrow to the very right of FromNode. Now connect the ToNode to your (first/only) node going in between your powercores to the ToNode link. It's essentially going to go on like that until you've connected all the dots... Just think of that one song, "the red core's connected to the - 1st node. The first node's connected to the - second node..." so on and so forth until you hit the enemy team's core. With this done, you may need to go in and test it. It's very easy to mix up which core is which and your blue core might be in your red base.
That's just about all you need to know about the basic functions of Warfare! Come back later and I may go over the different node types and how you can benefit from their use! Go try it out and remember to fix any "core" issues you may run into!
Sunday, May 1, 2011
Making a Take Damage trigger activate on selective damage
So today I'm going to go over something that you may or may not be able to accomplish. Apparently, there's a bug in the Unreal 3 Editor which will cause the Take Damage triggers to lose some functionality. When this happens, only splash damage weapons like the Shock Ball, Rocket, and Flak Ball will work. Unfortunately, I don't have a fix for that. The best way to make sure something will work with all weapons is to create the Take Damage trigger, alter the damage threshold, and never touch it again. As soon as you start messing with the damage types, this bug will happen.
Anyway, here's how to tell the game to differentiate between those 3 damage types I mentioned above.
So, setup your damage threshold to whatever you want. A rocket is going to do roughly 100 damage every hit. Same can be said for the flak ball, and the Shock Ball is going to do roughly half of that. So I'm going with something that factors by 100. To make it easy, I'm just going with 100.
Have your weapon-blocking actor selected and right click in Kismet to get a new event based on that actor and go to Take Damage. Once you have this, the threshold should already be at 100. Good. Now go into DamageTypes and click the green plus. This will give you a drop down menu. At this point, the bug is probably happening, so the only damage types we need to worry about taking effect are the weapons with splash damage that you're putting in your level. For me, it's flak, shock, and rocket. So I'm going to make this one a shock ball sensor. I'm going to add my shock rifle beam and shockrifle ball from the drop down of DamageTypes. Then, I'm going to add my flak and rocket damage types into the Ignored section so that they don't help get to the threshold.
Once that's done, connect a log or something that you want to happen up to it. I'm going to go off doing a custom event from here, so mine will get much more complicated after this. Make it output to screen so that you know it's working and how often it does so. Now go in game and test out your trigger. It should now only fire off if the correct weapon was used to attack it. If the object you selected to take damage isn't responding at all, make sure that it has collision and is set to at least block weapons.
Any questions or comments, feel free to leave a comment.
Anyway, here's how to tell the game to differentiate between those 3 damage types I mentioned above.
So, setup your damage threshold to whatever you want. A rocket is going to do roughly 100 damage every hit. Same can be said for the flak ball, and the Shock Ball is going to do roughly half of that. So I'm going with something that factors by 100. To make it easy, I'm just going with 100.
Have your weapon-blocking actor selected and right click in Kismet to get a new event based on that actor and go to Take Damage. Once you have this, the threshold should already be at 100. Good. Now go into DamageTypes and click the green plus. This will give you a drop down menu. At this point, the bug is probably happening, so the only damage types we need to worry about taking effect are the weapons with splash damage that you're putting in your level. For me, it's flak, shock, and rocket. So I'm going to make this one a shock ball sensor. I'm going to add my shock rifle beam and shockrifle ball from the drop down of DamageTypes. Then, I'm going to add my flak and rocket damage types into the Ignored section so that they don't help get to the threshold.
Once that's done, connect a log or something that you want to happen up to it. I'm going to go off doing a custom event from here, so mine will get much more complicated after this. Make it output to screen so that you know it's working and how often it does so. Now go in game and test out your trigger. It should now only fire off if the correct weapon was used to attack it. If the object you selected to take damage isn't responding at all, make sure that it has collision and is set to at least block weapons.
Any questions or comments, feel free to leave a comment.
Subscribe to:
Posts (Atom)