Hallucinogenesis alpha test

There are two huge problems with Mac support:

  1. It doesn’t work with Webstart, because our library is a Carbon lib and Java on the Mac is a Cocoa-native app. As soon as AWT starts up it grabs our keyboard and mouse handling and we no longer get input. Unfortunately this happens the moment Webstart is invoked. The only solution is that the whole LWJGL port needs moving to Cocoa one way or the other - we have completely failed to find out how to get keyboard/mouse events once AWT has done its nastiness.

  2. We can’t do Windowed mode on the Mac, and this is again largely due to the Cocoa/Carbon thing again and a general lack of knowledge on our part.

The best solution is probably a mixture of delegating to AWT on MacOS using reflected adapter classes, pinching large chunks of code from JOGL and JInput, and rewriting big parts of the LWJGL for OSX port. If you’re up to it join the long queue of Mac developers who want to help but strangely can’t find the time to actually produce any results :wink: Fame and fortune could be yours! etc.

Cas :slight_smile:

Intel 82845G/GL Card
2Ghz P4
1Gig Ram

It Ran.

I couldn’t use the control mechanism to change were I was shooting with any precission so I stopped playing.

Click on help and you’re stuck.

Looks like it could be fun if the controls change, I don’t like having to think about how to get my character to do something. It should be automatic after a few minutes. Maybe I’m just lazy.

I think I’ve cracked it! Try latest version (0.4-200406011) :slight_smile: Also try rooms [1,2], [3,8], [6,4], and [5,2]. (Hint: hold down ctrl to access rooms you can’t normally get to)

Cas :slight_smile:

Aaaaaah… much better :smiley:

Why haven’t I thought of this? :slight_smile:

[quote]If you’re up to it join the long queue of Mac developers who want to help but strangely can’t find the time to actually produce any results :wink: Fame and fortune could be yours! etc.
[/quote]
Hey man, fame and fortune doesn’t pay the bills :slight_smile:

Actually I have placed my order online for a Cocoa programming book… I should be an expert in a few weeks :)…

I still won’t have any free time though :frowning:

I am completely dizzy!! I am not joking…

[quote]I am completely dizzy!! I am not joking…
[/quote]
Seems like your “epelepsy barrier” (dunno how you say that in english) is pretty low. If you feel dazed/dizzy stop playing immediately. And stay away from those games, wich cause that.

The only thing, I know, for setting your epelepsy barrier higher (ahem) is consuming THC, but… y’know… a stoned coder is a bad coder :wink:

Runs perfectly !

JRE1.5b1
XP 2400+
GeForce4MX440

Pretty good game :wink: And very fun !

Ok, the controls are finalized, and there’s now a bit of music too to amuse you. Now the arduous task of designing another 60 levels is upon me. Help!!!

Cas :slight_smile:

HG has finally got a proper name… say goodbye to Hallucinogenesis and have a go at…

SUPER ELVIS!

Still just alpha. Not many levels (20-odd). Pooltable level is a bit broken. Hardly any music or sound effects. Don’t press help.

Cas :slight_smile:

Loving it!

  • Saucery is nice :slight_smile:
  • Catch as can catch is a bit… easy, and basically like other rooms, just different objects?
  • the sound effect for being hit, and hitting objects is sometimes the same, which makes a bit hard to determine whether one is being hit - or hitting enemies, without looking at the energy bar.

At one point I noticed a slowdown (probably GC) - but it was only for a very brief moment, and I never saw it again - so might have been a background I/O process disturbing.

Really like the intro screen, has a nice feel to it.

say goodbye to Hallucinogenesis

Hehe good move ;D

Already started calling it “Hallublabla” :-X

And levels… uhm…

#1 like in “eye” there is one thing in the middle (or let it move around the screen). Whenever you shoot it it either spits a collectable item or enemy thingy into your direction at high speed. You could call it “trick or treat”(or trick and treat heh), the thing in the middle could be the pumpkin and it can spit either a ghosts or candy. [focus on reaction]

#2 another level without shooting. Obstacles scrolling over the screen from rigth to left and some collectable items are inbetween. [focus on movement]

#3 eight thingies are placed around the screen (0°, 45°, 90° etc around the clock) and every so often one of em changes for a short period to something else and you’ve shoot it then. Do whatever you like for putting an end to this. [focus on aim/reaction]

#4 “ghost house” (mario-ish). Put a bunch of ghosts on the screen (let’s say 4 and 4 more further offscreen) and whenever you look at them (180°) they stop moving and are invulnerable. If you look away they slowly move towards you but are vulnerable then. So in order to defeat 'em you have to shoot in their direction and quickly look away :slight_smile: [focus on combination/looking ahead/basic controls]

And now I’m out of ideas :stuck_out_tongue:

I’ve made almost no attempt to deal with garbage this time round, it’s all quick and dirty new and forget. Every now and again it collects and a few frames judder but by and large it’s smooth as a baby’s bum, and that’s about as much effort as I can be arsed to spend on it. (FWIW the main culprit is particles, although some levels have an awful lot of aliens)

Still got to make some of those levels even easier and less frustrating.

I am pleading for a sound effects artist to sort out the sound. (The music’s damned good so far and I’ve got it for free too :))

Thanks for the level ideas oNyx. Fancy having a stab at the XML yourself :P?

Cas :slight_smile:

Fancy having a stab at the XML yourself :P?

Heh. Not really :wink:

Have a hard time catching up with my lagged schedule ._.

However, I hope you can use that ideas somehow.

Excellent!

As you say, Pool Table is very much broken. Even if you manage to interact with the white ball, even if you manage to hit the other balls into the pockets, even if you then manage to hit the black ball into a pocket, half the strawberries disappear off-screen, and are uncollectable. ;D

Alca Snapper has got a lot harder, and I think I prefer it. It does seem impossible at first, but once you learn how the ghosts behave, it’s just a matter of patience.

Saucery is pretty much perfect, don’t mess with that anymore.

I don’t know what I’m doing, but these days I tend to lose one hell of a lot of energy on Fruitini! I keep getting caught in a cloud of enemies and always snag a few while running for safety. But I usually win anyway.

I still hate Combination Lock. :stuck_out_tongue:

Zogs Rocking Trouble. Okay, I can complete it, but only at the expense of a few lives. If the skulls didn’t bounce off one another they would be more predictable, making it a game of skill rather than chance. :stuck_out_tongue: Also, if you inadvertently graze a skull, it’s likely to be game over immediately - this level does not tolerate mistakes, or even bad luck.

Sequence: The “missing earth” issue appears to have been resolved.

*steroids. Yeah, good fun. I find the HUD tends to get in the way on this level, mainly because what’s happening underneath it is critical even - or especially - when Elvis is at the top of the screen.

The Eye II seems a lot harder to me than The Eye III. Maybe you should swap those two over?

Boids I is a nice level! I watched for a while and thought “they’re flocking!” Then I shot a few. Then, my mind flicking back to Jurassic Park I unintentionally muttered “they’re flocking this way…”

[quote]Thanks for the level ideas oNyx. Fancy having a stab at the XML yourself :P?
[/quote]
Oh, come now! Don’t think you can get away with a comment like that without at least one request for an example XML document! I’d be fascinated to see how much description you need for those levels.

Here’s Alca Snapper:


      <room name="room.5,5" x="5" y="5" title="Alca Snapper" spawn="ghost_normal,pill" bullets="pacman" countdown="scared_count" collect="cherries.appearance">
            <behaviour
                  id="ghost_normal"
                  appearance="ghost2.appearance"
                  maxinstances="5"
                  mininstances="5"
                  spawndelay="10d10"
                  spawnduration="5"
                  bouncy="true"
                  edgebouncy="true"
                  movement="none 4fp 0fp"
                  duration="10d10+180"
            >
                  <spawn range="240" velocity="2"/>
                  <oncollision with="player" action="damage 4"/>
                  <oncollision with="pacman" action="damage 4"/>
                  <ontimeout action="behaviour ghost_nasty"/>
                  <onevent event="scare" action="behaviour ghost_scared"/>
            </behaviour>
            <behaviour
                  id="ghost_nasty"
                  appearance="ghost2.appearance"
                  master="ghost_normal"
                  bouncy="true"
                  movement="player 4fp 0.1fp"
                  duration="10d10+180"
            >
                  <oncollision with="player" action="damage 4"/>
                  <oncollision with="pacman" action="damage 4"/>
                  <ontimeout action="behaviour ghost_verynasty"/>
                  <onevent event="scare" action="behaviour ghost_scared"/>
            </behaviour>
            <behaviour
                  id="ghost_verynasty"
                  appearance="ghost2.appearance"
                  master="ghost_normal"
                  bouncy="true"
                  movement="player 8fp 0.1fp"
            >
                  <oncollision with="player" action="damage 4"/>
                  <oncollision with="pacman" action="damage 4"/>
                  <onevent event="scare" action="behaviour ghost_scared"/>
            </behaviour>
            <behaviour
                  id="ghost_scared"
                  appearance="ghost3.appearance"
                  master="ghost_normal"
                  bouncy="true"
                  movement="none 8fp 0.1fp"
            >
                  <spawn angle="1d256"/>
                  <oncollision with="player" action="explode"/>
                  <oncollision with="pacman" action="behaviour cherries"/>
                  <onevent event="pill_finished" action="behaviour ghost_normal"/>
            </behaviour>
            <behaviour
                  id="cherries"
                  appearance="cherries.appearance"
                  maxinstances="5"
                  mininstances="5"
                  duration="1d120+60"
                  movement="none"
            >
                  <oncollision with="player" action="collect"/>
                  <oncollision with="pacman" action="explode"/>
                  <ontimeout action="explode"/>
            </behaviour>
            <behaviour
                  id="pill"
                  appearance="pill1.appearance"
                  maxinstances="1"
                  mininstances="1"
                  spawnduration="60"
                  spawndelay="1d180+180"
                  movement="none"
            >
                  <spawn range="240" velocity="0"/>
                  <oncollision with="pacman" action="remove"/>
            </behaviour>
            <behaviour
                  id="pacman"
                  appearance="pacman.appearance"
                  spawnsolid="true"
                  mininstances="12"
                  maxinstances="12"
                  movement="none 16fp 1fp"
                  duration="100"
                  spawnduration="4"
            >
                  <spawn source="player" range="0" velocity="2" angle="0" inheritangle="true" />
                  <oncollision with="pill" action="add scared_count 120"/>
                  <oncollision with="*" action="explode"/>
                  <ontimeout action="remove"/>
            </behaviour>
            
            <trigger variable="scared_count" compare=">0" event="scare"/>
            <trigger variable="scared_count" compare="=0" event="pill_finished"/>
            
      </room>


Cas :slight_smile:

And here’s combination lock:


      <room name="room.3,5" x="3" y="5" title="Combination Lock" create="a,b,c,d,e,f,g,h" collect="strawberry.appearance">
            <behaviour
                  id="strawberry"
                  appearance="strawberry.appearance"
                  spawnduration="10"
                  movement="none 0fp 0fp"
                  maxinstances="8"
            >
                  <spawn/>
                  <oncollision with="player" action="collect"/>
            </behaviour>

            <trigger variable="lock" compare="=255" event="unlock"/>
            <trigger variable="lock" compare="set1" event="a_set"/>
            <trigger variable="lock" compare="set2" event="b_set"/>
            <trigger variable="lock" compare="set4" event="c_set"/>
            <trigger variable="lock" compare="set8" event="d_set"/>
            <trigger variable="lock" compare="set16" event="e_set"/>
            <trigger variable="lock" compare="set32" event="f_set"/>
            <trigger variable="lock" compare="set64" event="g_set"/>
            <trigger variable="lock" compare="set128" event="h_set"/>
            <trigger variable="lock" compare="!set1" event="a_unset"/>
            <trigger variable="lock" compare="!set2" event="b_unset"/>
            <trigger variable="lock" compare="!set4" event="c_unset"/>
            <trigger variable="lock" compare="!set8" event="d_unset"/>
            <trigger variable="lock" compare="!set16" event="e_unset"/>
            <trigger variable="lock" compare="!set32" event="f_unset"/>
            <trigger variable="lock" compare="!set64" event="g_unset"/>
            <trigger variable="lock" compare="!set128" event="h_unset"/>

            <behaviour id="a"
                  appearance="mushroom.appearance"
                  spawnduration="30"
                  movement="none 0fp 0fp"
                  onehit="true"
            >
                  <spawn location="200,150" range="50"/>
                  <oncollision with="player" action="xor lock 13; damage 2"/>
                  <onevent event="a_set" action="appearance ghost.appearance"/>
                  <onevent event="a_unset" action="appearance mushroom.appearance"/>
                  <onevent event="unlock" action="spawn strawberry 1; explode"/>
            </behaviour>
            <behaviour id="b"
                  appearance="mushroom.appearance"
                  spawnduration="30"
                  movement="none 0fp 0fp"
                  onehit="true"
            >
                  <spawn location="400,150" range="50"/>
                  <oncollision with="player" action="xor lock 10; damage 2"/>
                  <onevent event="b_set" action="appearance ghost.appearance"/>
                  <onevent event="b_unset" action="appearance mushroom.appearance"/>
                  <onevent event="unlock" action="spawn strawberry 1; explode"/>
            </behaviour>
            <behaviour id="c"
                  appearance="mushroom.appearance"
                  spawnduration="30"
                  movement="none 0fp 0fp"
                  onehit="true"
            >
                  <spawn location="600,150" range="50"/>
                  <oncollision with="player" action="xor lock 192; damage 2"/>
                  <onevent event="c_set" action="appearance ghost.appearance"/>
                  <onevent event="c_unset" action="appearance mushroom.appearance"/>
                  <onevent event="unlock" action="spawn strawberry 1; explode"/>
            </behaviour>
            <behaviour id="d"
                  appearance="mushroom.appearance"
                  spawnduration="30"
                  movement="none 0fp 0fp"
                  onehit="true"
            >
                  <spawn location="200,300" range="50"/>
                  <oncollision with="player" action="xor lock 12; damage 2"/>
                  <onevent event="d_set" action="appearance ghost.appearance"/>
                  <onevent event="d_unset" action="appearance mushroom.appearance"/>
                  <onevent event="unlock" action="spawn strawberry 1; explode"/>
            </behaviour>
            <behaviour id="e"
                  appearance="mushroom.appearance"
                  spawnduration="30"
                  movement="none 0fp 0fp"
                  onehit="true"
            >
                  <spawn location="600,300" range="50"/>
                  <oncollision with="player" action="xor lock 112; damage 2"/>
                  <onevent event="e_set" action="appearance ghost.appearance"/>
                  <onevent event="e_unset" action="appearance mushroom.appearance"/>
                  <onevent event="unlock" action="spawn strawberry 1; explode"/>
            </behaviour>
            <behaviour id="f"
                  appearance="mushroom.appearance"
                  spawnduration="30"
                  movement="none 0fp 0fp"
                  onehit="true"
            >
                  <spawn location="200,450" range="50"/>
                  <oncollision with="player" action="xor lock 160; damage 2"/>
                  <onevent event="f_set" action="appearance ghost.appearance"/>
                  <onevent event="f_unset" action="appearance mushroom.appearance"/>
                  <onevent event="unlock" action="spawn strawberry 1; explode"/>
            </behaviour>
            <behaviour id="g"
                  appearance="mushroom.appearance"
                  spawnduration="30"
                  movement="none 0fp 0fp"
                  onehit="true"
            >
                  <spawn location="400,450" range="50"/>
                  <oncollision with="player" action="xor lock 67; damage 2"/>
                  <onevent event="g_set" action="appearance ghost.appearance"/>
                  <onevent event="g_unset" action="appearance mushroom.appearance"/>
                  <onevent event="unlock" action="spawn strawberry 1; explode"/>
            </behaviour>
            <behaviour id="h"
                  appearance="mushroom.appearance"
                  spawnduration="30"
                  movement="none 0fp 0fp"
                  onehit="true"
            >
                  <spawn location="600,450" range="50"/>
                  <oncollision with="player" action="xor lock 200; damage 2"/>
                  <onevent event="h_set" action="appearance ghost.appearance"/>
                  <onevent event="h_unset" action="appearance mushroom.appearance"/>
                  <onevent event="unlock" action="spawn strawberry 1; explode"/>
            </behaviour>
      </room>

Now get typing! Best 9 levels will get into the game :stuck_out_tongue:

Cas :slight_smile:

Cas,

This rocks… tried it just once so far, at work (shhh;) but so far it’s really fun.

Why just $2? Haven’t you read all the psychology of pricing stuff at Dexterity? Anyway, I’ll spend up to $10 ( $2 is fine for me, that psychological mumbo-jumbo doesn’t work for me )

Bill

…just updated the demo. Got more music and a few more levels. Debugging mode currently on at the moment so autogenerated rooms just appear black on the map (so you don’t have to bother with them).

Use CTRL-click to jump into any room, and space bar to escape any room. (Debug mode, see)

Pooltable is still broken.

I’m trying to tune the difficulty. Any thoughts? I’m not even sure I want to have “lives” in the game any more.

Cas :slight_smile: