Omnimaga
Calculator Community => Other Calc-Related Projects and Ideas => TI Z80 => Topic started by: Michael.3545 on October 18, 2010, 06:39:14 pm
-
So, a while ago I was on ticalc.org, and I downloaded this (http://www.ticalc.org/archives/files/fileinfo/417/41737.html) file. I was impressed by the game, but there were some parts of it that I didn't like. I said to myself, "you should use Axe to make an awesome version of this." So I got started. The only thing left to do is add a control system for the ghosts.
I have to say my favorite part is wrapping from one side to the other.
(http://img844.imageshack.us/img844/1879/pacmang.gif)
Well, that's what I have been up to recently.
The source and executable can be found here:
http://www.box.net/shared/q7n2g5avh1 (http://www.box.net/shared/q7n2g5avh1)
If anyone is interested in making levels, I can edit in some more information on that.
-
Nice. :) The funny thing, is that program was written by Quigibo, the author of Axe. :P
Good luck on it. :)
-
Uh-oh, shh!
But seriously. I didn't even notice that.
-
Nice. What about a direct port?
-
By port, do you mean adapting the original Pac-Man game's code to axe?
-
Whoops, I meant "clone." Sorry, got them mixed up :-[
-
I can't make them exactly the same because of the screen size. Plus I don't want to make this scroll.
-
nice job! but didn't Quigibo make that program with Axe? i thought he did when I downloaded. ;)
-
Nope, it's pure ASM.
And wow, that was made by Quigibo? I never realized, even though I played it two years ago...
-
Wow awesome! It looks very great! I also remember an older port released in 1999-2000 but it had scrolling.
-
Here is an update on my progress, for anyone interested.
Completed:
- Added support for multiple levels
- Changed format of level data for maximum compression
- Made two more levels
- Fixed a bug with the warp tunnel
- Fixed a bug with losing lifes after winning a level
- Fixed some major issues with collision testing
- Set up an appvar
- Made making levels much easier through a BASIC program (uses Omnicalc)
To do:
- Add a control system for the ghosts.
- Create a game over screen
- Add high score saving
Things I am considering doing:
- Make turning easier
- Display score during gameplay
- Make main menu nicer looking (perhaps even with grayscale?)
Here is a (really long) screenie showing me eating lots of dots in the new levels. Near the end I mess with the new, more lenient collision testing.
(http://img828.imageshack.us/img828/6641/pacmanw.gif)
EDIT:
Attached prog, source and level creation program.
EDIT 2:
Removed spoiler from around code. Too much code at once is better than no code at all.
:.AAPACMAN A fun arcade game
:DiagnosticOff
:
:
:.appvar
:Lbl AV
:"vPac-Man"→Str1
:
:.only if exist
:UnarchiveStr1
:
:.exists? if notmake
:!If GetCalc(Str1)→O
:
: .create, ret if < RAM
: Return!If GetCalc(Str1,2)→O
:End
:
:.wrong size
:If {O-2}r≠2
: DelVar Str1
: Goto AV
:End
:
:.SPRITES:
:.CLOSED
:[387CFEFEFE7C3800]→Pic0
:.UP
:[82C6EEFEFE7C3800]→Pic1
:.RIGHT
:[3E7CF8F0F87C3E00]→Pic2
:.LEFT
:[F87C3E1E3E7CF800]→Pic3
:.DOWN
:[387CFEFEEEC68200]→Pic4
:.DOT
:[0000102810000000]→Pic5
:.LIFE
:[70E0C0E070000000]→Pic6
:.GHOST
:[387CD6FEFEFEAA00]→Pic7
:
:
:.no. of maps:
:3→θ
:.MAP DATA
:[FFFC006B6B1B120246C6B6B001FFF811B1B7171001F00FFFFC006F7B1112224446F7B001FFF8631767B70F0F0F0FFFFC446AAB4452FA5116AAB111FFF83491B4971001100F]→GDB1
:
:.TEXT DRAWN TO BUFFER
:Fix 5
:
:
:.MAIN MENU
:Lbl MM
:ClrDraw
:Fix 1
:Text(27,0,"PAC-MAN")
:Fix 0
:ref(0,8,96,1)
:Text(1,10,"By Michael Ripley")
:
:21→A
:Text(4,A,"2ND - Start")
:Text(4,A+7,"MODE - Quit")
:L1→P
:
:DispGraph
:
:While getKey(0)
:Pause 5
:End
:Repeat getKey(54)
: If getKey(15) or getKey(55)
: Goto EX
: End
:End
:
:.START GAME
:Lbl SG
:
:.init vars
:0→M→S+3→L
:
:
:.NEXT MAP
:Lbl NM
:
:
:.Load map data
:For(I,0,116)
: {M*23+(I/8)+GDB1}e(I^8)*2→iPart(L1*2+I+20}
:End
:
:
:.Draw map
:0→N
:ClrDrawr
:For(B,0,8)
: For(A,0,12)
: iPart(B*13+A+(L1*2)+20}→P
: If P=2
: ref(A*7,B*7,7,7)r
: End
: If P=0
: N+1→N
: Pt-On(A*7,B*7,Pic5)r
: End
: End
:End
:
:
:.RESET
:Lbl RS
:
:
:.G-pos
:0→{L1}
:
:.G-dir
:conj(M*23+GDB1+20,L1+1,3)
:
:.G-pos
:For(I,0,5)
: iPart(M*23+GDB1+16*2+I}*7→{L1+I+4}
:End
:
:.reset vars
:0→E→F+1→C→Q→Z
:
:.P-pos
:M*23+GDB1+15*2→P
:iPart(P}*7→X
:iPart(P+1}*7→Y
:
:.P-dir
:M*23+GDB1+19*2→P
:iPart(P}→G
:iPart(P+1}→H
:If G=15
: ‾1→G
:ElseIf H=15
: ‾1→H
:End
:If H=‾1
: 1→D
:ElseIf G=1
: 2→D
:ElseIf G=‾1
: 3→D
:Else
: 4→D
:End
:
:sub(RD,1)
:sub(DW)
:Pause 1000
:
:.MAIN LOOP
:Repeat getKey(55) or F
:
: .KEY PRESSES
: If getKey(1)
: !If pxl-Test(X,Y+7)r+pxl-Test(X+6,Y+7)r
: 0→G+1→H+3→D
: End
: End
: If getKey(2)
: !If pxl-Test(X-1,Y)r+pxl-Test(X-1,Y+6)r
: ‾1→G+1→H+3→D
: End
: End
: If getKey(3)
: !If pxl-Test(X+7,Y)r+pxl-Test(X+7,Y+6)r
: 0→H+1→G+1→D
: End
: End
: If getKey(4)
: !If pxl-Test(X,Y-1)r+pxl-Test(X+6,Y-1)r
: ‾1→H+1→G+1→D
: End
: End
:
: .MOVE
: DS<(Z,2)
: X+G→A
: Y+H→B
: !If pxl-Test(A,B)r+pxl-Test(A+6,B)r+pxl-Test(A,B+6)r+pxl-Test(A+6,B+6)r
: A→X
: B→Y
: If X=91
: 0→X
: ElseIf X=‾1
: 90→X
: End
: If X>84
: X-91→E
: Else
: 0→E
: End
: End
:
: .MOVE GHOSTS
: ............
: For(I,0,2)
: .gXp, gYp
: I*2+L1+4→A+1→B
: L1+1*2+(I*2)→U+1→V
: iPart(U}→U
: iPart(V}→V
: If U=15
: ‾1→U
: ElseIf V=15
: ‾1→V
: End
:
:
: .INSERT BRAIN HERE
: .!If X^7 or (Y^7)
: .End
:
: {A}+U→{A}
: {B}+V→{B}
:
: .coll test
: If N
: If {A}-5≤X and ({A}+5≥X)
: If {B}-5≤Y and ({B}+5≥Y)
: 1→F
: L-1→L
: End
: End
: End
: End
: End
:
:
: .WOKKA WOKKA
: DS<(Q,10)
: C=0→C
: End
:
: sub(RD,0)
: sub(DW)
:End
:
:If F=2
: M+1→M
: .map loopback
: If M=θ
: 0→M
: End
: Goto NM
:End
:
:If F=1
: Fix 3
: Text(10,0,"You have died")
: Fix 2
: DispGraph
: Repeat getKey(54)
: End
: Goto RS
:End
:
:.if F=0, then:
:Goto MM
:
:
:.EXIT
:Lbl EX
:Fix 4
:ClrHome
:While getKey(0)
:Pause 5
:End
:Return
:
:
:.remove dot
:Lbl RD
:!If X^7 or (Y^7)
: X/7→A
: Y/7→B
: B*13+A+(L1*2)+20→P
: !If iPart(P}
: N-1→N
: !If N
: 2→F
: End
: !If r1
: S+1→S
: End
: 1→iPart(P}
: Pxl-Off(X+3,Y+2)r
: Pxl-Off(X+2,Y+3)r
: Pxl-Off(X+4,Y+3)r
: Pxl-Off(X+3,Y+4)r
: End
:End
:Return
:
:
:.DRAW
:Lbl DW
:ClrDraw
:RecallPic
:
:
:.ghost
:For(I,0,2)
: I*2+L1+4→P
: Pt-On({P},{P+1},Pic7)
:End
:
:Pt-On(X,Y,C*D*8+Pic0)
:If E
: Pt-On(E,Y,C*D*8+Pic0)
:End
:If L>>0
: For(P,0,L-1)
: Pt-On(92,P*6,Pic6)
: End
:Else
: If L=‾1
: 3→F
: End
:End
:ref(91,28,5,7)
:rref(91,28,5,7)
:DispGraph
-
ooh, this looks very nice. (especially the warp wrap-around) i haven't tried it out, but if turning is difficult it should register if a directional key is pressed and then wait until either the character can turn in the designated direction or until another key is pressed before the player has to do anything else. gray all throughout would also look nice and might make the ghosts stand out a bit more(i like how they were programmed, btw. very inventive).
props all around!
-
Unfortunately, because of an optimization I used, I can't use grayscale in the game loop. (The backbuffer is taken)
BTW, any ideas on a routine for controlling the ghosts are appreciated. :)
EDIT:
Also, how do I display any input I get using the input command?
Don't forget, its a string of tokens, not characters.
I am confused by that. Thanks!
-
This (http://ourl.ca/7568/131899).
EDIT: Wow, really? Thumbing me down for jokingly pointing out a bug in Chrome? Maybe the omnimaga community is worse than I had thought...
EDIT 2: Well it seems that my comment was poorly worded and off-topic, so it wasn't taken well. Which I guess is my fault. I won't delete my previous edit so others can see it if they like, but it's my rash overreaction to my poor attempt at humor being negatively received. I don't hate the omnimaga community... I'm not neutral towards the omnimaga community... I don't like the omnimaga community... I love the omnimaga community. It's the site I spend the majority of my time online at, it's the site I spend the majority of my time reading, and it's the site I spend the majority of my time producing content for. If omnimaga disappeared I don't know what I would ever do, because it has become a core facet of my life. And I'm sorry for ever having said otherwise.
I'm not sure what else to write, I think that's about it. Sorry.
-
Runer112 people are free to use CODE tags in spoilers if they want (although I don't see why it's that necessary since guests can open them anyway). In Opera not doing so stretches the page like crazy when there's data inside code anyway and those users aren't complaining. Maybe you could fix the spoiler tag mod for SMF? http://custom.simplemachines.org/mods/index.php?mod=195
Plus this was totally off-topic anyway.
Anyway The game looks nice so far and I hope you finish it.
EDIT: I saw your first edit but thank you for your 2nd one. Personally I am starting to question the legitimability of my position at Omnimaga.
-
Nice job Michael!
-
Last night I finished the high score system. It is pretty nice, and supports 16 character strings of uppercase, lowercase, and spaces. It has a backspace key, and stores the top three scores. I am very happy about this, because it means I won't need to come back and change anything. Here is a screenshot of the default high scores, which I think will be appreciated. I don't plan on changing these.
(http://img828.imageshack.us/img828/7820/pacmanz.gif)
-
Lol I saw the highscore screen on IRC last night and laughed at my 666 score :P
Nice that you got them working :)
-
That looks great! Nice job!
I really like the look of the gameplay. ;D
What method are you using for name input? :)
-
Ztrumpet, I am using a method I created myself just for this purpose.
This is designed to be called as sub(GHS). PrgmAAAINPUT is supposed to be the last line of a file. If you have any questions, ask.
:.GETHISCR
:Lbl GHS
:
:Fix 1
:Fix 4
:
:0→{GDB0}
:0→E→L→K→I+1→U
:
:sub(DSP)
:
:Repeat E
: getKey→K
: If K=9 and (L>0)
: 1→E
: End
: If K=4
: 1→U
: ElseIf K=1
: 0→U
: ElseIf K=2
: If L>0
: L-1→L
: 0→{GDB0+L}
: sub(DSP)
: End
: End
: If K
: For(I,0,26)
: If {GDB00+I}=K
: sub(SC1,I)
: End
: End
: End
:
:
: While getKey(0)
: End
:End
:Fix 0
:Fix 5
:ClrHome
:Return
:
:Lbl SC1
:If r1=0
: sub(SC2,32)
: Return
:End
:If U
: sub(SC2,r1+64)
:Else
: sub(SC2,r1+96)
:End
:Return
:
:Lbl SC2
:If L<16
: r1→{GDB0+L}
: 0→{GDB0+L+1}
: L+1→L
: sub(DSP)
:End
:Return
:
:Lbl DSP
:ClrHome
:Text(16,0,"HIGH SCORE!")
:Output(0,2,"Type your name:")
:If {GDB0}
: Output(0,3,GDB0
:End
:If L<16
: Output(L,3,95►Frac)
:End
IMPORTANT: before starting this sub, GDB0 and GDB00 must be initialized exactly like so:
:det(17)→GDB0
:DeltaList(33,47,39,31,46,38,30,22,14,45,37,29,21,13,44,36,28,20,12,43,35,27,19,11,42,34,26)→GDB00
Omnimagicians, I need help!
I just added some code to try to make the ghosts turn at intersections, and I got this:
(http://img220.imageshack.us/img220/4895/ohno.gif)
I have looked over it several times and can't figure out what is going on. The changes I just made are between the
: .G-BRAIN
:..............
and the
:..............
Please ask me any questions you have. I will be offline after this post, but should be back on tomorrow morning. Sorry for the delay, and sorry Opera users for any massive scrolling I have caused you.
Here is my source:
:.AAPACMAN A fun arcade game
:DiagnosticOff
:
:
:.appvar
:Lbl AV
:"vPac-Man"→Str1
:
:.only if exist
:.UnarchiveStr1
:
:.exists? if notmake
:!If GetCalc(Str1)→O
:
: .create, ret if < RAM
: Return!If GetCalc(Str1,57)→O
: 666→{O}r
: 256→{O+2}r
: 13→{O+4}r
: "DJ"→Str01
: "Byte"→Str02
: "Clyde"→Str03
: For(I,0,16)
: {Str01+I}→{O+I+6}
: End
: For(I,0,16)
: {Str02+I}→{O+I+23}
: End
: For(I,0,16)
: {Str03+I}→{O+I+40}
: End
:End
:
:.wrong size
:ReturnIf {O-2}r≠57
:
:
:.SPRITES:
:.CLOSED
:[387CFEFEFE7C3800]→Pic0
:.UP
:[82C6EEFEFE7C3800]→Pic1
:.RIGHT
:[3E7CF8F0F87C3E00]→Pic2
:.LEFT
:[F87C3E1E3E7CF800]→Pic3
:.DOWN
:[387CFEFEEEC68200]→Pic4
:.DOT
:[0000102810000000]→Pic5
:.LIFE
:[70E0C0E070000000]→Pic6
:.GHOST
:[387CD6FEFEFEAA00]→Pic7
:
:
:.no. of maps:
:3→θ
:.MAP DATA
:[FFFC006B6B1B120246C6B6B001FFF811B1B7171001F00FFFFC006F7B1112224446F7B001FFF8631767B70F0F0F0FFFFC446AAB4452FA5116AAB111FFF83491B4971001100F]→GDB1
:
:
:.hi scr stuffs
:det(17)→GDB0
:DeltaList(33,47,39,31,46,38,30,22,14,45,37,29,21,13,44,36,28,20,12,43,35,27,19,11,42,34,26)→GDB00
:
:
:.TEXT DRAWN TO BUFFER
:Fix 5
:
:
:.MAIN MENU
:Lbl MM
:ClrDraw
:Fix 1
:Text(27,0,"PAC-MAN")
:Fix 0
:ref(0,8,96,1)
:Text(1,10,"By Michael Ripley")
:
:21→A
:Text(4,A,"2ND - Start")
:Text(4,A+7,"ALPHA - High Scores"
:Text(4,A+14,"MODE - Quit")
:L1→P
:
:DispGraph
:
:While getKey(0)
:Pause 5
:End
:Repeat getKey(54)
: If getKey(15) or getKey(55)
: Goto EX
: Else If getKey(48)
: Goto HS
: End
:End
:Goto SG
:
:.HIGH SCORE
:Lbl HS
:ClrDraw
:Fix 1
:Text(16,0,"High Scores")
:Fix 0
:For(I,0,2)
: I*7+10→P
: Text(3,P,I+49►Frac,"."
: Text(15,P,{I*2+O}r►Dec)
: Text(40,P,I*17+O+6)
:End
:DispGraph
:While getKey(0)
:Pause 50
:End
:Repeat getKey(54) or getKey(15) or getKey(55) or getKey(48)
:End
:Goto MM
:
:
:
:.START GAME
:Lbl SG
:
:.init vars
:0→M→S+3→L
:
:
:.NEXT MAP
:Lbl NM
:
:
:.Load map data
:For(I,0,116)
: {M*23+(I/8)+GDB1}e(I^8)*2→iPart(L1*2+I+20}
:End
:
:
:.Draw map
:0→N
:ClrDrawr
:For(B,0,8)
: For(A,0,12)
: iPart(B*13+A+(L1*2)+20}→P
: If P=2
: ref(A*7,B*7,7,7)r
: End
: If P=0
: N+1→N
: Pt-On(A*7,B*7,Pic5)r
: End
: End
:End
:
:
:.RESET
:Lbl RS
:
:
:.G-pos
:0→{L1}
:
:.G-dir
:conj(M*23+GDB1+20,L1+1,3)
:
:.G-pos
:For(I,0,5)
: iPart(M*23+GDB1+16*2+I}*7→{L1+I+4}
:End
:
:.reset vars
:0→E→F+1→C→Q→Z
:
:.P-pos
:M*23+GDB1+15*2→P
:iPart(P}*7→X
:iPart(P+1}*7→Y
:
:.P-dir
:M*23+GDB1+19*2→P
:iPart(P}→G
:iPart(P+1}→H
:If G=15
: ‾1→G
:ElseIf H=15
: ‾1→H
:End
:If H=‾1
: 1→D
:ElseIf G=1
: 2→D
:ElseIf G=‾1
: 3→D
:Else
: 4→D
:End
:
:sub(RD,1)
:sub(DW)
:Pause 1000
:
:.MAIN LOOP
:Repeat getKey(55) or F
:
: .KEY PRESSES
: If getKey(1)
: !If pxl-Test(X,Y+7)r+pxl-Test(X+6,Y+7)r
: 0→G+1→H+3→D
: End
: End
: If getKey(2)
: !If pxl-Test(X-1,Y)r+pxl-Test(X-1,Y+6)r
: ‾1→G+1→H+3→D
: End
: End
: If getKey(3)
: !If pxl-Test(X+7,Y)r+pxl-Test(X+7,Y+6)r
: 0→H+1→G+1→D
: End
: End
: If getKey(4)
: !If pxl-Test(X,Y-1)r+pxl-Test(X+6,Y-1)r
: ‾1→H+1→G+1→D
: End
: End
:
: .MOVE
: DS<(Z,2)
: X+G→A
: Y+H→B
: !If pxl-Test(A,B)r+pxl-Test(A+6,B)r+pxl-Test(A,B+6)r+pxl-Test(A+6,B+6)r
: A→X
: B→Y
: If X=91
: 0→X
: ElseIf X=‾1
: 90→X
: End
: If X>84
: X-91→E
: Else
: 0→E
: End
: End
:
: .MOVE GHOSTS
: For(I,0,2)
: .gXp, gYp
: I*2+L1+4→A+1→B
: L1+1*2+(I*2)→U+1→V
:
: .get J,K
: sub(GGD)
:
:
: .G-BRAIN
:..............
:
: .On tile
: !If {A}^7 or ({B}^7)
: L4+2→P
: 0→{L4}r
: 0→{P}
: If J
: J*‾1→{L4}
: Else
: K*‾1→{L4+1}
: End
:
:.stop indent
:
:.1 UP
:!If pxl-Test({A},{B}-1)r
:If {L4+1}≠‾1
: 0→{{P}*2+L4+3}
: ‾1→{{P}*2+L4+4}
: {P}+1→{P}
:End
:End
:
:.2 RIGHT
:!If pxl-Test({A}+7,{B})r
:If {L4}≠1
: 1→{{P}*2+L4+3}
: 0→{{P}*2+L4+4)
: {P}+1→{P}
:End
:End
:
:.3 DOWN
:!If pxl-Test({A},{B}+7)r
:If {L4+1}≠1
: 0→{{P}*2+L4+3}
: 1→{{P}*2+L4+4}
: {P}+1→{P}
:End
:End
:
:.4 LEFT
:!If pxl-Test({A}-1,{B})r
:If {L4}≠‾1
: ‾1→{{P}*2+L4+3}
: 0→{{P}*2+L4+4}
: {P}+1→{P}
:End
:End
:
:.resume indent
:
: {rand^{L4+2}*2+L4+3}→P
: {P}→iPart(U}
: {P+1}→iPart(V}
: sub(GGD)
: End
:
:..............
:
: {A}+J→{A}
: {B}+K→{B}
:
: .coll test
: If N
: If {A}-5≤X and ({A}+5≥X)
: If {B}-5≤Y and ({B}+5≥Y)
: 1→F
: L-1→L
: End
: End
: End
: End
: End
:
:
: .WOKKA WOKKA
: DS<(Q,10)
: C=0→C
: End
:
: sub(RD,0)
: sub(DW)
:End
:
:.Game Over
:If F=3
: ClrDraw
: Fix 1
: Text(0,0,"Game Over")
: Fix 0
: Text(0,10,"Score: ",S►Dec)
: DispGraph
: While getKey(0)
: .do-nothing
: Pause 50
: End
: Repeat getKey(54)
: End
:
: .HI SCORE!
: If S>{O+4}r
: .in ext prog
: sub(GHS)
: S→{O+4}r
: For(I,0,17)
: {GDB0+I}→{O+I+40}
: End
: If {O+4}r>{O+2}r
: expr(O+4,O+2,2)
: expr(O+40,O+23,17)
: If {O+2}r>{O}r
: expr(O+2,O,2)
: expr(O+23,O+6,17)
: End
: End
: End
:End
:
:.beat level
:If F=2
: M+1→M
: .map loopback
: If M=θ
: 0→M
: End
: Goto NM
:End
:
:.lost life
:If F=1
: Fix 3
: Text(10,0,"You have died")
: Fix 2
: DispGraph
: Repeat getKey(54)
: End
: Goto RS
:End
:
:.pressed MODE
:Goto MM
:
:
:.EXIT
:Lbl EX
:Fix 4
:ClrHome
:While getKey(0)
:Pause 5
:End
:Return
:
:
:.get G-dir
:Lbl GGD
:If iPart(U}=15
: ‾1→J
:ElseIf iPart(V}=15
: ‾1→K
:End
:Return
:
:
:.remove dot
:Lbl RD
:!If X^7 or (Y^7)
: X/7→A
: Y/7→B
: B*13+A+(L1*2)+20→P
: !If iPart(P}
: N-1→N
: !If N
: 2→F
: End
: !If r1
: S+1→S
: End
: 1→iPart(P}
: Pxl-Off(X+3,Y+2)r
: Pxl-Off(X+2,Y+3)r
: Pxl-Off(X+4,Y+3)r
: Pxl-Off(X+3,Y+4)r
: End
:End
:Return
:
:
:.DRAW
:Lbl DW
:ClrDraw
:RecallPic
:
:
:.ghost
:For(I,0,2)
: I*2+L1+4→P
: Pt-On({P},{P+1},Pic7)
:End
:
:Pt-On(X,Y,C*D*8+Pic0)
:If E
: Pt-On(E,Y,C*D*8+Pic0)
:End
:If L>>0
: For(P,0,L-1)
: Pt-On(92,P*6,Pic6)
: End
:Else
: If L=‾1
: 3→F
: End
:End
:ref(91,28,5,7)
:rref(91,28,5,7)
:DispGraph
:Return
:
:.HISCORE STUFF
:prgmAAAINPUT
EDIT:
Changed the word "Omnimaga" to the more grammatically correct "Omnimagicians".
-
I think it might be best to ask for help in a new topic in the Axe sub-forum, as typically, questions asked and requests made in project topics tend to be ignored, especially that some member never go out of the Axe sub-forum. Also lol at the edit :P