Hi !
Featured games (84)
games approved by the League of Dukes
Games in Showcase (565)
Games in Android Showcase (152)
games submitted by our members
Games in WIP (607)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
   Home   Help   Search   Login   Register   
  Show Posts
Pages: [1] 2 3 ... 33
1  Discussions / Miscellaneous Topics / Re: What I did today on: 2015-03-31 21:14:55
Crystal Motivator coming along nicely. Cheesy

Click to Play
2  Discussions / Miscellaneous Topics / Re: What I did today on: 2015-03-30 08:50:53
Finally finished my new in-line string colors.. here's a bunch of pages that now use it. Cheesy

In the first two screenshot here's the only method calls I have to do to draw the messages on-screen.
It will be nightmare for third screenshot)

it will be good to remove text and position GUI from code
(also after some time it will be nightmare to change someting)
+easy to add in game gui editor)

     font.drawString(x, y+86, "§YEL1Seriously are"
            + "\nyou §RED1ABSOLUTELY sure?"
            + "\n§WHI0THE OLD GAME WILL BE DELETED", 2, true);
      buttonReally.render(g, mouse, x-43, y+165, debug, false);

will be good use relative position not absolute position to everything

It actually both, you're just not seeing the rest of the code. Smiley

The smaller parts of the GUI that's positions should be absolute to each other are loaded in small groups, and then positioned on the screen with relative values. For example..

     warningMessage.render(screenWidth/2, screenHeight/2); //Center of the screen at all times, basically.

inside warningMessage:
render(float x, float y){
     someElement1(x+15, y+50);
     someElement2(x+132, y+150);
     someElement2(x+126, y+266);

The real code is a lot more complicated, but that's the general idea. So basically everything inside the element is positioned with absolute values, but where the element is rendered is relative. I also have no intention on ever adding a GUI editor. Feature creep and what not. Smiley

(EDIT: Where did the post I replied to go? Shocked )
3  Discussions / Miscellaneous Topics / Re: What I did today on: 2015-03-30 02:24:07
ASCII alt-codes aren't cross-platform.

I honestly did not know this, guess that explains why other java games (like minecraft) use characters like the &.

Any suggestions for a clean single character to use, that's cross platform and never really expected to be displayed on screen?
4  Discussions / Miscellaneous Topics / Re: What I did today on: 2015-03-30 01:21:25
Finally finished my new in-line string colors.. here's a bunch of pages that now use it. Cheesy

Surely there's a better escape sequence than '§'.

It was just the only thing I could think of off-hand that absolutely would never need to actually be displayed on the screen and had a fairly easy to remember ASCII code (ALT+21) Smiley
5  Game Development / Newbie & Debugging Questions / Re: How to detec Collisions in open world games? on: 2015-03-29 19:28:04
Since you obviously shouldn't check your collision box(es) with every other collision box in the entire game, I would consider something like this:

1. Build all your collision boxes in the game (however you do it)
2. Have a range detection like this that goes through all your collision boxes that are loaded:
if ((Math.abs(youX-objectsX) < distanceX) && (Math.abs(youY-objectsY) < distanceY) && (Math.abs(youZ-objectsZ) < distanceZ))

3. Stick whatever objects pass the statement into an ArrayList<Object>;
4. Now, you can just loop through the arraylist you collected and only check for collisions nearby instead of map-wide.

Pseudocode for 3D checks, remove
 && (Math.abs(youZ-objectsZ) < distanceZ)
if this is for 2D:
// distanceX, Y and Z are the distance you want to check around the player.
// objectArray is the assumed collections you keep all this in.
// youX and objectX are the positions of you and the objects being checked.

//Create a new array list to store things in.
ArrayList<Objects> tempObjectArray = new ArrayList<Objects>();

//Loop through whatever collections you have for all the game objects loaded.
for (int i = 0; i < objectArray.size(); i++){
     Object object = objectArray.get(i);
     if ((Math.abs(youX-object.getObjectsX()) < distanceX)
        && (Math.abs(youY-object.getObjectsY()) < distanceY)
        && (Math.abs(youZ-object.getObjectsZ()) < distanceZ)){

//Now check collision only with the objects in the tempObjectArray
for (int i = 0; i < tempObjectArray.size(); i++){

It's just a concept, I use it often in RPC but mainly for range detection. RPC doesn't actually have any collision detection, but the concept should work just as well unless you have absolutely massive amounts of collision objects loaded. If you do, I would suggest a chunking system where you only fetch certain areas. Like breakup the map into smaller pieces and detect what piece the player is in, then do the above only in that area to narrow it down to around the player.

there's a bazillion ways to do this, but this way seems to be the most straightforward if you just want to fetch everything around the player and only check against them instead.
6  Discussions / Miscellaneous Topics / Re: What I did today on: 2015-03-29 07:24:19
Finally finished my new in-line string colors.. here's a bunch of pages that now use it. Cheesy

In the first two screenshot here's the only method calls I have to do to draw the messages on-screen.

   font.drawString(x, y+70, "§ORA1Are you sure?!", 2, true);

   if (confirmation){
      font.drawString(x, y+86, "§YEL1Seriously are"
            + "\nyou §RED1ABSOLUTELY sure?"
            + "\n§WHI0THE OLD GAME WILL BE DELETED", 2, true);
      buttonReally.render(g, mouse, x-43, y+165, debug, false);
      buttonYes.render(g, mouse, x+12, y+130, debug, true);
      font.drawString(x, y+86, "You already have an active "+gameMode
            + "\ngame. Are you sure you want to restart"
            + "\n§GRE1"+mapName+"?", 1, true);
      buttonYes.render(g, mouse, x+12, y+130, debug, false);

7  Discussions / Miscellaneous Topics / Re: What I did today on: 2015-03-27 07:38:38
Whatever you do, don't get tempted into feature-creeping your way into something that resembles HTML or UBB code... it's good as it is, I tell ya.

^ Wink

in-line color is probably as far as it'll go, it only happened because it seemed the best solution for my multicolored console output so I went ahead and just rewrote my font class to use the tags everywhere. The original system was basically
drawString(x, y, "Green font!", Color.GREEN, fontSize);
, so each string could only be one solid color. Now I can go this;
drawString(x, y,"§GREGreen font and §BLUBlue font!", fontSize)
and my font class just cuts it all up and formats it accordingly. I could of used my old system anyway, but the code to print out things on the console probably would of been a hacky mess.

Output example:
"Small Farm has been completed."
"Bilbo Bagginz has leveled up!"
"Bob Bobby was killed by a Zombie"

8  Game Development / Newbie & Debugging Questions / Re: OSX 10.10 seems to have broken my games on: 2015-03-27 07:32:42
A lack of crash reports is rather ambiguous as a statistic  Pointing  Kiss

Dunno, my mac users throw a hissy fit the nanosecond something isn't exactly perfect. Tongue

<insert joke about picky Mac fanboys>
9  Discussions / Miscellaneous Topics / Re: What I did today on: 2015-03-26 15:16:57
I've been working on some in-line string color formatting, so I can do things like this with a single drawString call:

"§GREI am green and §BLUI am blue!"
"I am green and I am blue!"

.. still a bit buggy though;

10  Game Development / Newbie & Debugging Questions / Re: OSX 10.10 seems to have broken my games on: 2015-03-26 15:13:43
If it helps, Retro-Pixel Castles is running LWJGL 2.9.3 and I've gotten no crash reports from any of my mac users, but I haven't been bothered to update my dusty Mac Mini and check it myself yet. Smiley
11  Games Center / Showcase / Re: Paper Pacman on: 2015-03-22 23:37:32
Cool little concept.

Some suggestions for polish:
- I assume the ruler on the side is a hint it was drawn with a ruler, to explain the straight lines. But for some artistic edge, I would make those lines overdraw a bit here and there (like he went too far as he was lifting his pen, so there's some stray marks)
- Make the lines fade in and out a little, like the pen was drawn at various pressures and angles.
- Reanimate all the characters to look hand drawn
- Make all the dots slightly offset of each other (2 or 3 pixels) randomly, then make 5 or 6 different dot artworks, so it looks more natural.
- Make some errors, or scribbles/doodles in the unused areas of the paper, maybe some very slight discolorations/stains in the paper.

Overall, cool idea. Just my nitpicky polish ideas to improve the visuals more. Wink
12  Discussions / General Discussions / Re: Looking for some guys to make a 2D RPG on: 2015-03-20 19:33:01
We need proof you yourself have all the required skills to do this entire job on your own, with proven examples of completed (or impressive) games or other projects that will get our attention.

If you don't do that, you're just going to look like another guy in the tens of thousands who want to make a "kewl game" that do not have what it takes, or are too lazy to do the work themselves. You have to wow us. There's tons of these team requests, so you need to do more than just ask people to work with you. You could start with showing us what your engine can do, maybe some screenshots/videos of it in action.
13  Discussions / Miscellaneous Topics / Re: What I did today on: 2015-03-18 05:12:21
Today I tried to compile Intel's own Adaptive Order-Independent Transparency algorithm on an Intel graphics card and immediately regretted my decision when the entire driver crashed during shader linking. I think this is pretty much the ultimate proof of what kind of state Intel drivers are in.

What I Did Today Since RPC Launched:

Troubleshot many, many Intel HD Graphics systems. It always seems like if RPC has a problem initializing LWJGL/OpenGL, the user is on Intel Graphics. Completely hit and miss too, because I have 3 laptops and a Mac Mini all with different generations of Intel HD chipsets and they all work just fine. :/
14  Discussions / Community & Volunteer Projects / Re: Starting a team (Music Composer, Developer, 3d designer, and writer needed) on: 2015-03-17 16:28:42
Calling me lazy is just straight up insulting me. How do I come off as lazy ? If you noticed I didn't ask for a programmer.. Only a graphics designer (Just because I want my game assets to look good doesn't mean I'm lazy), Assets don't put themselves together you know? I'm gonna be loading them in my engine, I'm going to be working on the game mechanics, I already stated that; A game is a collaborative effort, Not a one man job.
But I don't get why you see that as lazy.. Honestly I don't care, But this is the problem with "programming" "communities", They're hardly a community, It's mostly people stealing from each other, And if they can't find something to steal they hate.. In the end it was wrong of me to ask on such a forum, The result was pretty obvious, People are gonna try to sound like smart asses.. geez..

And @everyoneelse Making a demo would kill the purpose of a demo, I don't have good enough assets to put in the engine and show a good demo.. But here's a preview..

Geez people in here are so dumb..

I said I had a gut feeling based on past experience, and I still have that gut feeling. Remember, most of the time even you won't realize that's what you're doing.

Also, that's why I tossed this in there, in case I am wrong, because it's possible I just took your post out of context;
If that isn't the OP'ers intent, I mean no offense.

But, the fact you snapped at me the way you did sort of proves my point. You're falling right in-line with the personalities I was referencing. Smiley

Either way, I would highly recommend getting more meat to show people before trying to put together a whole team. That, or learn the required skills yourself and don't have a team at all.
15  Discussions / Community & Volunteer Projects / Re: Starting a team (Music Composer, Developer, 3d designer, and writer needed) on: 2015-03-17 07:24:35
This seems to be a another "bash anyone who asks for people to join their project" thread! What a fun and encouraging community there is here.  

I wouldn't call it bashing, so much as educating people with firm words not to try to use people because they're too lazy to do their own work.

Is that what the OP is doing? No idea. My gut says yes, even if the OP'er is unaware. But this is based off years of seeing internet "teams" come and go (In all walks, not just programming) where the leader just wants to sit on his throne and bark orders and never actually do anything. It's not just a game dev problem, it's human nature. Lots of people want to have the title of "leader" and don't actually want to do anything.

If that isn't the OP'ers intent, I mean no offense.
16  Discussions / Community & Volunteer Projects / Re: Starting a team (Music Composer, Developer, 3d designer, and writer needed) on: 2015-03-17 01:09:40
I'm not saying definitively one way or the other (I don't know where you picked up that vibe at all in this topic). I'm just saying that people generalize teens as having bad work ethic.

That's because generally it's true. Wink

Not all kids are unable to stick to a project for more than a week, but I'd never hire random kids, if I was going to pickup a less-than-18 (Hell, less-than-25) year old he's going to be someone I already know, proven to have the maturity to be dedicated to the project without getting bored and running off.

Sorry, but almost all kids think a month is "a long time" for a single project, and that's pretty much a drop in the bucket to how much time is actually required.

Not to mention all the other issues, like the ability to work in a team and not run off doing "whatever". Smiley
17  Discussions / Miscellaneous Topics / Re: IRC? on: 2015-03-15 20:25:39
I was wondering how in the hell Riven made this forum detect my username inside an image for mentions then I noticed your trickery Pointing

Was about to come here and say the same thing. Shocked
18  Game Development / Newbie & Debugging Questions / Re: Odd Collision Issue on: 2015-03-09 03:36:13
Well, right now you're not really even running the loop. You run it once, set velocity.x to 0 and break the loop. So really your entire loop is being ignored.

But I'm not quite following what you mean, there are other ways to write the forloop, but the actual end functionality would be the same.

For example this is (basically) the same;
for (int x = 0; x < tiles.size(); x++)

for (Rectangle tile : tiles)
19  Game Development / Newbie & Debugging Questions / Re: Odd Collision Issue on: 2015-03-09 02:55:25
huh. That's strange. You must have some wonky code somewhere tripping it up. Maybe somewhere else where you're checking for overlaps that has a return; that should(nt) be firing?
20  Games Center / Featured Games / Re: [Slick2d] Retro-Pixel Castles > Now on Steam! < on: 2015-03-09 02:15:27
Thanks Wink
21  Games Center / Featured Games / Re: [Slick2d] Retro-Pixel Castles > Now on Steam! < on: 2015-03-09 01:53:33
That's good, and expected! Sales won't be good until you're out of early access. Imagine sales days too, like the winter sales and stuff!

yeah, Early Access really only brings in good sales if you get REALLY popular (Like Kerbal Space Program or H1Z1 for example) I think most Early Access titles really don't see many sales. But really, Early Access isn't about the money, it's about the feedback. So I don't mind. Wink

That and I still actually get sales, so it's not like I'm NOT making any money. I'm no doubt making a lot more now than I ever have in gamedev.
22  Games Center / Featured Games / Re: [Slick2d] Retro-Pixel Castles > Now on Steam! < on: 2015-03-09 01:29:24
So you like having it on steam? Smiley Is the experience good all together? I really hope to one day release to steam.

I enjoy it. Right now the sales are slow, because I'm in Early Access and in Pre-Alpha. But that's expected. Overall it's been a great experience and good exposure. The more the game gets developed the more daily sales I make, so that's a good sign for the future. Smiley
23  Game Development / Newbie & Debugging Questions / Re: Odd Collision Issue on: 2015-03-09 01:26:48
Without seeing all your code, and fulling understanding your collision system this is my best guess based on the symptoms:
To me it sounds like you're moving the entity faster than 1 pixel/cycle and checking for collision at the end of the cycle, so if lets say you're moving 5 pixels a cycle you may hit the wall and go into it a few pixels before the collision check fires in the same cycle. Thus, you did collide, but now you're also partially overlapping and trapped.

If I'm right, you should be able to slow down your movement speed and you'll no longer get stuck.

Collision issues are a pain to debug, because everyone's code is different. Wink
24  Games Center / Featured Games / Re: [Slick2d] Retro-Pixel Castles > Now on Steam! < on: 2015-03-09 00:41:03
InDev 13 is here! This new stable build introduces a ton of new content, tweaks, a better GUI, smaller (but much less resource intensive) maps and many other features.

Originally it was going to be even beefier, but I've decided to push some of InDev 13's planned features into InDev 14 so not to keep you guys from receiving a update for a while. Don't worry, there are no delays. The content you will be getting in 14 you would of gotten around the same time anyway, I just decided to break up InDev 13 into two updates so you can get some of the features a little early. Smiley

So, I hope you enjoy the new features!

IMPORTANT NOTE: This build WILL break all your previous custom maps. You must use the map converter found in the Retro-Pixel Castles install folder to continue using them!

You can report bugs over at the official website's Support and Bugs Forum, or on the Steam Discussion Board. Smiley

InDev 13 Change Log
- New 256x256 map size.
- Added a console based map converter, to convert your maps from the old 512x512 to the new 256x256 system. It can be found in the Retro-Pixel Castles install folder.
- Due to the decreased map size, frame rate, memory usage, and system requirements have dropped dramatically.
- Added new "Wheat Wind" track.
- Converted "The Quiet Forest" and "Hunted" into 8 smaller maps.
- Removed all of the Developer's Choice Maps, except the ones that were originally "Small" or "Medium" sized maps. (Others will be re-added once the authors convert them to their liking.)
- Added a bunch of new tile sets; Sandstone (In Red, Black and Tan), new Rock (in Black, Brown, Red and White).
- Added two new foods, Turnips and Potatoes. But they currently still think they're carrots.
- New map tiles property loader, that helps decrease load time.
- Fixed a bug where sometimes walls would not connect together correctly.
- Drawing in the map editor now no longer replaces the same tile if it already exists.
- Main Menu now loads random maps from the Official Maps pack.
- Added a "Recent News and Announcements" box on the main menu.
- "Stone" resources renamed to "Rock".
- New resources: Boards (Refined logs), Stone (Refined rock) and Crylithium (Refined Crystals).
- Harvesting buildings can now refine the resources brought in into the new refined resources listed above. For example, the Lumber Mill will manufacture boards, and the Crystillery will manufacture Crylithium.
- Completely rebalanced all the building requirements. Many advanced buildings require the new refined resources.
- Added the Small and Regular Crystillary, used for harvesting crystals.
- Added the Cullis Gate, a large Essence Collector like building that will build up and discharge large amounts of energy attempting to summon new villagers into the game ... or other things.
- Rebalanced many of the building costs, and magic based buildings like the Essence Collector and Fire Bolt tower now require crystals to be built.
- Added some new particle effects to the game to use with the new Cullis Gate.
- Added some blue fire flickers to the Essence Collector.
- Essence Collectors and Fire Bolt towers no longer generate essence.
- Essence Collectors and the new Cullis Gate are now fueled with Crylithium.
- Essence Collector's maximum energy reduced to 250.
- Re-added the "Category" frame icons to the Play and Map Editor GUIs.
- Added a pause button for buildings.
- Completely redrawn the bottom pop out GUI in the play mode.
- Completely recoded and redrawn the population tab. The new population tab now lists how many villagers are not employed, homeless, have a mate, or are pregnant along with some other miscellaneous information.
- Added a new buildings tab, based off the new populations tab. The new building tab lists how much total housing you have, how many total workers you have and many other useful tidbits.
- You can click on buildings or villagers in either of the two new tabs to center on them. (Note: Currently, in low resolutions sometimes the center may be under the GUI)
- Many miscellaneous GUI artwork improvements.
- New Mob: The Skeleton. They do not have much health, or hit hard. But they're extremely fast and can sometimes run past your towers.
- Lowered the monster spawn rate substantially.
- Fixed a bug in the map editor's info panel that would not detect if you're trying to use a map name already taken.
- Moved the resource bar in the play mode to above the top GUI.
- Removed the water sparkle trail from Essence.
- Added a new objects tab, when you select an object to build in play mode a small description of that object and the requirements to build it will be displayed.
- Fixed a bug that was causing lag when looking for resources on ground.
- Fixed a bug where villagers would pick up resources to use they shouldn't need, and set them back on the ground.
- Added the Kickstarter Backer's names to the villager name pool.
- Updated the Credits page, adding the additional Kickstarter Backers who submitted their surveys late.
- Added all the Kickstarter Backer's quotes to the game.
- Fixed the lag some users experienced in the credits page.
- Fixed a localization issue that would cause some user's copy of the game to crash attempting t find game resources (Thanks to: khadgar.rumnheim for finding the solution!)
- Tons of under the hood code cleanup.
25  Discussions / Miscellaneous Topics / Re: IRC? on: 2015-03-08 10:47:44
I agree with Riven here....

I like the re-organization in #java-gaming on Freenode. I'm an op now along with LiquidNitrogen, NegativeZero, and OceanAshedragon. We will make sure to keep things more mature and in check. Riven could you add this channel to the banner or the side bar?

I agree, the new channel feels much more legitimate and official, I vote we have a link for it on JGO somewhere.

We'll even play nice and not ban Riven when he uses it. Wink
26  Discussions / General Discussions / Re: How to Charge for ONLINE-Play: Subscription vs. Credits/Wallet? on: 2015-03-07 09:59:26
The problem with getting charged for the amount you play, is that it discourages people to play. With a flat fee, however, people will want to make most of their 'investment' and play as much as they want (or more).

^ This.

Unlimited play with a flat monthly fee with encourage people to get every penny worth, where as if you charge for the amount they play it's much less motivating. Hell, that's part of many reasons why the "Arcade" of the 1990s (and back) died off. Aside from bringing arcade quality games to the home, no one wants to "pay per play" if they arent absolutely forced, and your player base will have a ton of other games to play so you'll just get passed up for something else.

The pay-per-play option really only works in Gambling, or when it's the only option on the platform.
27  Discussions / General Discussions / Re: How do I request my game to be featured? on: 2015-03-06 09:13:41
My guess is requesting to get featured isn't a "sure" thing, it's more a "hey guys, I'm ready to be seriously considered". If it was a simple matter of just requesting it, then every single game in showcase would be featured.

But, from what I've seen, I think Riven (and possibly Jimmt or kappa?) just move games over there they like.
28  Java Game APIs & Engines / OpenGL Development / Re: Using Slick2D's Image.getGraphics crashes on some machines on: 2015-03-06 09:08:50
I'm afraid none of this matters, because it's the call to getGraphics that makes things crash!

Well, I was running off the assumption you were actually using getGraphics() incorrectly. But Cas may be right, and it's actually a driver issue.
29  Game Development / Newbie & Debugging Questions / Re: When can I start making games? on: 2015-03-03 08:22:15
Just start.

Try making Space Invaders.

Cas Smiley

^ This. Smiley

Even if you have no clue what you're doing, the best way to learn is just to try anyway. You just don't want to go crazy and try to make a full 3d MMORPG like everyone seems to want to do now a days. Make something a little bit beyond your abilities, and just keep pushing your limits until you're skilled enough to make something cool.
30  Java Game APIs & Engines / OpenGL Development / Re: Using Slick2D's Image.getGraphics crashes on some machines on: 2015-03-03 08:17:39
In your real code, are you doing this:
Graphics g = img.getGraphics()
and use the graphics object or are you calling it the same way you are in your sample code?

In the real code, I create the Image once only, and I do use the Graphics, of course. But having minimized the reproduction, the thing that causes the crash is getGraphics() alone. Note that it doesn't crash at getGraphics. It crashes later, at the end of the frame, during nSwapBuffers.

Depending on what you're doing with getGraphics(), I've found it better to create an instance of a Graphics object with it, use the object as needed and throw it out when you're done.

   Image someImage = new Image(64,64);
   Image someOtherImage = new Image("pathTo.png")

   public void drawToSomeImage() throws SlickException {
      Graphics g = someImage.getGraphics();
      g.drawImage(someImageYouLoaded, someX, someY;


   public void render() throws SlickException {

Now someImage can be rendered, with someOtherImage drawn on it. This is totally impractical code, but you get the idea. Cheesy
Pages: [1] 2 3 ... 33
Riven (10 views)
2015-04-01 18:27:05

ags1 (27 views)
2015-03-31 10:55:12

theagentd (13 views)
2015-03-27 23:08:20

wxwsk8er (54 views)
2015-03-20 15:39:46

Fairy Tailz (48 views)
2015-03-15 21:52:20

Olo (29 views)
2015-03-13 17:51:59

Olo (33 views)
2015-03-13 17:50:51

Olo (40 views)
2015-03-13 17:50:16

Olo (44 views)
2015-03-13 17:47:07

ClaasJG (61 views)
2015-03-10 11:36:42
How to: JGO Wiki
by Mac70
2015-02-17 20:56:16

2D Dynamic Lighting
by ThePixelPony
2015-01-01 20:25:42

How do I start Java Game Development?
by gouessej
2014-12-27 19:41:21

Resources for WIP games
by kpars
2014-12-18 10:26:14

Understanding relations between setOrigin, setScale and setPosition in libGdx
by mbabuskov
2014-10-09 22:35:00

Definite guide to supporting multiple device resolutions on Android (2014)
by mbabuskov
2014-10-02 22:36:02

List of Learning Resources
by Longor1996
2014-08-16 10:40:00

List of Learning Resources
by SilverTiger
2014-08-05 19:33:27 is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!