• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

Scroll Chat System v0.9

This bundle is marked as useful / simple. Simplicity is bliss, low effort and/or may contain minor bugs.
Uses Bribe's Indexer!

The rest is made by me.

This system is designed for
Blades 'n Gore II


for his new UI system.

Things to do :

* Hash based system, which does not use Bribe's Indexer.
* Chat string overload system.
* Scrolling Name, instead of repeatedly mentioning the name.

Change Log v0.7d

*Removed Leak

Change Log v0.9

* Changed Template due to the client's request.
* Added name above text
* Changed Loop Integer A to using variable

Keywords:
chat, UI, bribe, indexer, log, blades and gore, blades and gore 2, blades and gore II, bng, bng2, bng 2, bng II, bngII, scrolling, animated, epic, xor
Contents

Scrolling Chat System v0.9 (Map)

Reviews
12th Dec 2015 IcemanBo: Too long as NeedsFix. Rejected. 11:20, 23rd Jul 2013 PurgeandFire: Marked as "Needs fix" until the bugs have been sorted out. :)

Moderator

M

Moderator

12th Dec 2015
IcemanBo: Too long as NeedsFix. Rejected.

11:20, 23rd Jul 2013
PurgeandFire: Marked as "Needs fix" until the bugs have been sorted out. :)
 
Level 17
Joined
Jul 17, 2011
Messages
1,864
Le Code

[trigger=1]Chat box Initialization
Events
Map initialization
Conditions
Actions
-------- Run this Initialization on your map initialization --------
-------- Chat Box System Requires Unit Indexer --------
-------- -------------------------------------- --------
-------- Modifiable --------
-------- Set Up --------
Set cBox_DummyType = ChatDummy
Set cBox_maxChatRows = 8
Set cBox_lineSpace = 100.00
Set cBox_NormalSize = 10.00
Set cBox_animSpeed = 5.00
Set cBox_soundEffect = cBox_ChatSoundEffect <gen>
Set cBox_chatStartLocation = (Center of Start Pixel <gen>)
Set cBox_isInstant = False
-------- -------------------------------------- --------
-------- Initialize system variables and constants --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
cBox_isInstant Equal to True
Then - Actions
Set cBox_InitialVelocity = cBox_lineSpace
Else - Actions
Set cBox_InitialVelocity = (5.00 x cBox_animSpeed)
Set cBox_MaxDistance = (cBox_lineSpace x (Real(cBox_maxChatRows)))
Set cBox_MaxDistance = (cBox_MaxDistance + cBox_lineSpace)
Set cBox_currentQueueInteger = 1
Set cBox_maxQueueInteger = 0
Hashtable - Create a hashtable
Set cBox_Hash = (Last created hashtable)
-------- -------------------------------------- --------
-------- Initialize event --------
For each (Integer A) from 1 to 12, do (Actions)
Loop - Actions
Trigger - Add to Chat Event <gen> the event (Player - (Player((Integer A))) types a chat message containing <Empty String> as A substring)
-------- -------------------------------------- --------
-------- Delete line below --------
-------- Testing Purposes --------
-------- Initialize Player Camera --------
For each (Integer A) from 1 to 12, do (Actions)
Loop - Actions
Camera - Set (Player((Integer A)))'s camera Angle of attack to 270.00 over 2.00 seconds
Camera - Set (Player((Integer A)))'s camera Rotation to 90.00 over 2.00 seconds
Camera - Set (Player((Integer A)))'s camera Distance to target to 2560.00 over 2.00 seconds
Camera - Set (Player((Integer A)))'s camera Field of view to 90.00 over 0.00 seconds
Camera - Pan camera for (Player((Integer A))) to (Center of Camera center <gen>) over 0.00 seconds
Visibility - Disable fog of war
Visibility - Disable black mask
-------- Initialize Player Color --------
Set Ccode_P[1] = RedColorCode
Set Ccode_P[2] = BlueColorCode
-------- -------------------------------------- --------
[/trigger]

[trigger=2]Chat Event
Events
Conditions
Actions
Unit - Create 1 cBox_DummyType for (Triggering player) at (Center of Start Pixel <gen>) facing 90.00 degrees
Set Key = (Custom value of (Last created unit))
Set cBox_scrolledDistance[Key] = 0.00
Set cBox_TargetDistance[Key] = cBox_lineSpace
Set cBox_Velocity[Key] = cBox_InitialVelocity
Set cBox_currentDistance[Key] = 0.00
Set cBox_Size[Key] = (cBox_NormalSize x 1.50)
Set cBox_Transparancy[Key] = 0.00
Set cBox_String[Key] = (((Name of (Triggering player)) + : ) + (Entered chat string))
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Length of cBox_String[Key]) Greater than or equal to 32
Then - Actions
-------- -------------------------------------- --------
-------- When string reaches 32, floating text will appear weird --------
Game - Display to (All players) the text: Over limit!
-------- Overloaded string will be seperated into single floating text each --------
-------- -------------------------------------- --------
-------- String overload system under construction --------
For each (Integer A) from 0 to (Length of (Entered chat string)), do (Actions)
Loop - Actions
Set cBox_String[Key] = (Substring((Entered chat string), (Integer A), (Integer A)))
-------- -------------------------------------- --------
Else - Actions
Floating Text - Create floating text that reads cBox_String[Key] above (Last created unit) with Z offset 0.00, using font size cBox_Size[Key], color (100.00%, 100.00%, 100.00%), and 0.00% transparency
Floating Text - Change (Last created floating text): Disable permanence
Set cBox_floatingText[Key] = (Last created floating text)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(cBox_ScrollGroup is empty) Equal to True
Then - Actions
-------- If scroll group is empty (not scrolling) --------
-------- Then we instantiate the floating text normally --------
-------- Play sound on chat --------
Sound - Play cBox_soundEffect
-------- -------------------------------------- --------
-------- Scroll Inactive text upward --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(cBox_InactiveGroup is empty) Equal to False
Then - Actions
Unit Group - Pick every unit in cBox_InactiveGroup and do (Actions)
Loop - Actions
Set cBox_TempUnit2 = (Picked unit)
Set Key = (Custom value of cBox_TempUnit2)
Set cBox_scrolledDistance[Key] = 0.00
Set cBox_Velocity[Key] = cBox_InitialVelocity
Set cBox_TargetDistance[Key] = cBox_lineSpace
Unit Group - Remove cBox_TempUnit2 from cBox_InactiveGroup
Unit Group - Add cBox_TempUnit2 to cBox_ScrollGroup
Trigger - Turn on Chat Scroller <gen>
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(cBox_ScrollGroup is empty) Equal to False
Then - Actions
Unit Group - Pick every unit in cBox_ScrollGroup and do (Actions)
Loop - Actions
Set cBox_TempUnit2 = (Picked unit)
Set Key = (Custom value of cBox_TempUnit2)
Set cBox_scrolledDistance[Key] = 0.00
Set cBox_Velocity[Key] = cBox_InitialVelocity
Set cBox_TargetDistance[Key] = cBox_lineSpace
Trigger - Turn on Chat Scroller <gen>
Else - Actions
-------- -------------------------------------- --------
Unit Group - Add (Last created unit) to cBox_ScrollGroup
Trigger - Turn on Chat Scroller <gen>
-------- -------------------------------------- --------
Else - Actions
-------- If scroll group is not empty (scrolling) --------
-------- Then we instantiate the floating text in queued list --------
-------- To avoid clamping of text --------
-------- -------------------------------------- --------
Set cBox_maxQueueInteger = (cBox_maxQueueInteger + 1)
Hashtable - Save Handle Of(Last created unit) as (Key QueuedChat) of cBox_maxQueueInteger in cBox_Hash
Floating Text - Hide cBox_floatingText[Key] for (All players)
-------- -------------------------------------- --------
[/trigger]

[trigger=3]Queue Manager
Events
Conditions
cBox_currentQueueInteger Less than or equal to cBox_maxQueueInteger
cBox_maxQueueInteger Greater than 0
Actions
-------- -------------------------------------- --------
-------- Play sound on chat --------
Sound - Play cBox_soundEffect
-------- -------------------------------------- --------
-------- Scroll Inactive text upward --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(cBox_InactiveGroup is empty) Equal to False
Then - Actions
Unit Group - Pick every unit in cBox_InactiveGroup and do (Actions)
Loop - Actions
Set cBox_TempUnit2 = (Picked unit)
Set Key = (Custom value of cBox_TempUnit2)
Set cBox_scrolledDistance[Key] = 0.00
Set cBox_Velocity[Key] = cBox_InitialVelocity
Set cBox_TargetDistance[Key] = cBox_lineSpace
Unit Group - Remove cBox_TempUnit2 from cBox_InactiveGroup
Unit Group - Add cBox_TempUnit2 to cBox_ScrollGroup
Trigger - Turn on Chat Scroller <gen>
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(cBox_ScrollGroup is empty) Equal to False
Then - Actions
Unit Group - Pick every unit in cBox_ScrollGroup and do (Actions)
Loop - Actions
Set cBox_TempUnit2 = (Picked unit)
Set Key = (Custom value of cBox_TempUnit2)
Set cBox_scrolledDistance[Key] = 0.00
Set cBox_Velocity[Key] = cBox_InitialVelocity
Set cBox_TargetDistance[Key] = cBox_lineSpace
Trigger - Turn on Chat Scroller <gen>
Else - Actions
-------- -------------------------------------- --------
-------- Run Queued list in order --------
Set cBox_TempUnit3 = (Load (Key QueuedChat) of cBox_currentQueueInteger in cBox_Hash)
Set Key = (Custom value of cBox_TempUnit3)
Special Effect - Create a special effect attached to the overhead of cBox_TempUnit3 using Abilities\Spells\Other\TalkToMe\TalkToMe.mdl
Floating Text - Show cBox_floatingText[Key] for (All players)
Set cBox_currentQueueInteger = (cBox_currentQueueInteger + 1)
Trigger - Turn off (This trigger)
Unit Group - Add cBox_TempUnit3 to cBox_ScrollGroup
Trigger - Turn on Chat Scroller <gen>
-------- -------------------------------------- --------
[/trigger]

[trigger=4]
Chat Scroller
Events
Time - Every 0.03 seconds of game time
Conditions
Actions
-------- -------------------------------------- --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(cBox_ScrollGroup is empty) Equal to False
Then - Actions
Unit Group - Pick every unit in cBox_ScrollGroup and do (Actions)
Loop - Actions
-------- -------------------------------------- --------
Set cBox_TempUnit = (Picked unit)
Set Key = (Custom value of cBox_TempUnit)
-------- -------------------------------------- --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
cBox_scrolledDistance[Key] Less than cBox_TargetDistance[Key]
Then - Actions
-------- -------------------------------------- --------
-------- Decrease chat box size to normal size --------
-------- For animation --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
cBox_Size[Key] Greater than cBox_NormalSize
Then - Actions
Set cBox_Size[Key] = (cBox_Size[Key] - (cBox_NormalSize / 20.00))
Else - Actions
-------- -------------------------------------- --------
-------- If velocity exceeds chat distance, set velocity to remaining distance. --------
-------- This is so that the line spacing is perfectly alligned. --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(cBox_scrolledDistance[Key] + cBox_Velocity[Key]) Greater than cBox_TargetDistance[Key]
Then - Actions
Set cBox_Velocity[Key] = (cBox_TargetDistance[Key] - cBox_scrolledDistance[Key])
Else - Actions
-------- -------------------------------------- --------
-------- Decrease velocity --------
-------- For animation --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
cBox_Velocity[Key] Greater than 1.00
Then - Actions
Set cBox_Velocity[Key] = (cBox_Velocity[Key] - (cBox_InitialVelocity / 50.00))
Else - Actions
Set cBox_Velocity[Key] = 1.00
-------- -------------------------------------- --------
-------- Accumulate current distance --------
Set cBox_currentDistance[Key] = (cBox_currentDistance[Key] + cBox_Velocity[Key])
-------- -------------------------------------- --------
-------- Move unit location --------
Set cBox_TempPoint = (Position of cBox_TempUnit)
Set cBox_TempPoint2 = (cBox_TempPoint offset by cBox_Velocity[Key] towards 90.00 degrees)
Set cBox_X = (X of cBox_TempPoint2)
Set cBox_Y = (Y of cBox_TempPoint2)
Custom script: call SetUnitX(udg_cBox_TempUnit, udg_cBox_X)
Custom script: call SetUnitY(udg_cBox_TempUnit, udg_cBox_Y)
-------- -------------------------------------- --------
-------- Accumulate scrolled distance --------
Set cBox_scrolledDistance[Key] = (cBox_scrolledDistance[Key] + cBox_Velocity[Key])
-------- -------------------------------------- --------
-------- If it reach the target distance --------
-------- Stop moving --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
cBox_scrolledDistance[Key] Greater than or equal to cBox_TargetDistance[Key]
Then - Actions
Set cBox_Velocity[Key] = 0.00
Else - Actions
-------- -------------------------------------- --------
-------- Update floating text location --------
Floating Text - Change the position of cBox_floatingText[Key] to cBox_TempUnit with Z offset 0.00
Floating Text - Change text of cBox_floatingText[Key] to cBox_String[Key] using font size cBox_Size[Key]
-------- -------------------------------------- --------
-------- If floating text exceed floating line limit, remove floating text --------
-------- with dissapearing animation --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
cBox_currentDistance[Key] Greater than or equal to (cBox_MaxDistance - (cBox_lineSpace x 2.00))
Then - Actions
Set cBox_Transparancy[Key] = ((((cBox_lineSpace x 2.00) - (cBox_MaxDistance - cBox_currentDistance[Key])) / (cBox_lineSpace x 2.00)) x 100.00)
Floating Text - Change the color of cBox_floatingText[Key] to (100.00%, 100.00%, 100.00%) with cBox_Transparancy[Key]% transparency
Animation - Change cBox_TempUnit's vertex coloring to (100.00%, 100.00%, 100.00%) with cBox_Transparancy[Key]% transparency
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
cBox_Transparancy[Key] Greater than or equal to 100.00
Then - Actions
Floating Text - Destroy cBox_floatingText[Key]
Unit Group - Remove cBox_TempUnit from cBox_ScrollGroup
Unit Group - Remove cBox_TempUnit from cBox_InactiveGroup
Unit - Remove cBox_TempUnit from the game
Else - Actions
Else - Actions
-------- -------------------------------------- --------
-------- Remove leaks --------
Custom script: call RemoveLocation(udg_cBox_TempPoint)
Custom script: call RemoveLocation(udg_cBox_TempPoint2)
-------- -------------------------------------- --------
Else - Actions
-------- -------------------------------------- --------
-------- If chat unit has stopped moving --------
-------- Register unit as inactive --------
Unit Group - Add cBox_TempUnit to cBox_InactiveGroup
Unit Group - Remove cBox_TempUnit from cBox_ScrollGroup
-------- -------------------------------------- --------
Else - Actions
-------- -------------------------------------- --------
-------- If there is no longer moving chat animations --------
-------- Turn off this trigger --------
Trigger - Turn off (This trigger)
-------- -------------------------------------- --------
-------- Run queue list in order as the chat animation ends --------
Trigger - Run Queue Manager <gen> (checking conditions)
-------- -------------------------------------- --------

[/trigger]


i think its kinda lulzy that you are using a unit to move the texts because you dont need to
 
Last edited:
Level 29
Joined
Oct 24, 2012
Messages
6,543
dont use integer A/B use ur own integer. integer A/B are slower and less efficient than ur own.
anything u use twice or more store into a variable and use the variable.

u leak a point here.
  • Unit - Create 1 cBox_DummyType for (Triggering player) at (Center of Start Pixel <gen>) facing 90.00 degrees
also u should read the rules of posting in this forum. u r not supposed to submit unfinished systems or spells. this should be in ideas thread ( for ideas) or triggers and scripts ( for getting more efficiency) or WEHZ ( for asking how to finish ur system / spell)
 
dont use integer a/b use ur own integer. Integer a/b are slower and less efficient than ur own.
uhh no, they are not slower. They're just like any other global variable.
Because BnG already has colored text variable, but I don't mind to add one here.
When releasing things in resource sections, one must act as though the resource is for anyone :3
Why use Units? Also, Are you using floating texts? I would like to remind you that you can only create 100 visible texttags for all players.
This is a valid point, you should consider showing texts in local player blocks to reduce the amount used by the system.
 
Level 29
Joined
Oct 24, 2012
Messages
6,543
GUI is not inlined. it is changed from GUI to JASS but it is not inlined. Thats y JASS is much bette to use because u get rid of those non-inlined BJs

the only way that u use the variable itself is if u use it in a custom script.
this was already discussed by me purge, maker, and others.

here is a trigger in GUI
  • For each (Integer A) from 1 to 10, do (Actions)
    • Loop - Actions
      • Game - Display to (All players) the text: (String((Integer A)))
here is wat it changes to in jass. notice how the jass script still calls the function rather than just using the integer. this is the slow and inefficient part.
JASS:
function Trig_Untitled_Trigger_001_Actions takes nothing returns nothing
    set bj_forLoopAIndex = 1
    set bj_forLoopAIndexEnd = 10
    loop
        exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
        call DisplayTextToForce( GetPlayersAll(), I2S(GetForLoopIndexA()) )
        set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop
endfunction
 
Also, Integer A/B can cause crash if two threads synchronize that has the loop of Integer A/B.

It is like:
JASS:
set bj_forLoopAIndex = 0
loop
    exitwhen bj_forLoopAIndex == 10
    set bj_forLoopAIndex = bj_forLoopAIndex + 1
endloop
// Next code was in different thread which was synchronized with the code above:
set bj_forLoopAIndex = 0
loop
    exitwhen bj_forLoopAIndex == 10
    set bj_forLoopAIndex = bj_forLoopAIndex + 1
endloop

This causes crash AFAIK, I just experienced this when multiple triggered spells that uses only one integer variable causes the map to crash.
 

Chaosy

Tutorial Reviewer
Level 40
Joined
Jun 9, 2011
Messages
13,183
So this shows every message written?
That could be much easier I think. Unless there is some other feature

however its useful 3/5

edit:
I downloaded the map for a test.

creating units beside the text is odd to me it feels no real purpose.
however you make it look good with the fade and that it is slightly biggeer.

but I still think this can be done in a better way.
 
Last edited:
Level 8
Joined
Oct 12, 2011
Messages
483
@deathismyfriend
I once heard a wise man say:
deathismyfriend said:
plz dont double post instead hit the edit button on ur last post.
Lol...

Otherwise, I agree with the majority, don't use floating text and units, but use the hassle display text. If you really need an effect on a unit or anything, you can add that afterwards.
 
Nestharus emulates it. You're not getting the same threading facilities you'd get in some other language.

The real problem is when you fire a trigger that has an Integer A loop from inside an integer A loop.

Execution would look like this:

JASS:
set bj_forLoopAIndex = 0
loop
    exitwhen bj_forLoopAIndex == 10

    // This loop modifies the index which the outer loop depends on.
    set bj_forLoopAIndex = 0
    loop
        exitwhen bj_forLoopAIndex == 10
        set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop
    // After this loop, the index will be 10
    
    // Now the index will be 11
    set bj_forLoopAIndex = bj_forLoopAIndex + 1
    // Oh no! This loop is fucked.
    // If the condition is in its current state, the trigger will crash.
    // If the condition uses >= instead of ==, the loop will iterate an 
    // incorrect number of times, so either way, you're fucked.
endloop

Only time you can use Integer A safely is inside a trigger with a map initialization or a timer event, but you
have to make sure that it is impossible for the code inside the loop to fire ANY other triggers.

This is why I'd suggest simply using one integer per loop.
It's less brainwork and it assures better safety.

Use your greater judgement though.

In this example code, it's okay to use the same integer for the loop:

JASS:
local integer i = 0

loop
    exitwhen i == 10
    set i = i + 1
endloop

set i = 0
loop
    exitwhen i == 20
    set i = i + 1
endloop

That would be equivalent to 2 consecutive loops in GUI that use the same integer variable as an index.
 
Last edited:
The point is, no GUIer who still uses A/B Index loops will never sync two threads. Also to complain about efficiency of setting one extra integer variable is a joke. Therefore calling GUIers out on this function is a waste of time. While good practice it may be, you're just confusing people.

And anyone using Index A inside another loop of Index A is a retard. The other GUI method would have just the same problem, so that point of your argument is invalid Magtheridon96. Index B is there for a reason.
 
And anyone using Index A inside another loop of Index A is a retard. The other GUI method would have just the same problem, so that point of your argument is invalid Magtheridon96. Index B is there for a reason.

Then don't use it directly.

I have explained this one hundred and one times before and here's the hundred and second:

  • Trigger 1
    • Events
      • Unit - A unit dies
    • Conditions
    • Actions
      • // Integer A loop
  • Trigger 2
    • Events
      • // Any event
    • Conditions
    • Actions
      • // Integer A loop
      • // In the actions of this loop, you're killing a unit
And this kind of thing can happen all the time. These kinds of bugs are nasty and due to how easy it is to fire triggers and make big loop code, sooner or later, you're going to face bugs.

Integer B doesn't make it any better. It just makes everything less maintainable.

One integer per loop solves the problem. "Too many globals" is not a problem as memory is cheap and you're not going to have 2000 loops in your code.
I don't see how my argument is invalid. What other GUI method are you talking about?
 
Dude, you are NOT calling the trigger in the middle of the loop, the Wc3 engine is firing it and you are not always aware of that. It's not possible to have full control over the order of execution of things when you're dealing with public resources. This is one of the reasons I made RegisterPlayerUnitEvent and gave access to the trigger corresponding to an event: So systems like SetUnitDamage could actually work without firing a crapton of item pickup events for you to respond to.

You don't want to end up changing a fuckton of triggers when you add a unit damage action to a loop just because it might kill a unit and fire a death trigger, that's a waste of time and it will lead to bugs one way or another because it decreases maintainability. This is one point in favor of one-integer-per-loop.

In a map with a decent amount of triggers, you're not going to be in full control over what triggers get executed. If you deal damage to a unit in a loop and he dies, you end up firing a bunch of death triggers and you don't want THAT to be a reason for your system to fail. You don't want your systems posted on this site to fuck up half the systems out there as well.

If we just allow for shit like this, we might as well allow the modification of Custom Value/Unit User Data. Integer A/B is as global as Unit User Data and it's impact on the global state approaches infinity the more code you have that uses it.

Integer A/B introduces global state into the map and this is among the worst things you can do to your code.
Using a different global for every other loop solves the problem because it emulates, as best as possible in GUI, scoping. Each loop would have its own index, making it pretty fucking hard for one loop to fuck up another one.

I'm not saying you're actually going to use 2 nested Integer A loops, I'm saying the order of execution of things allows for that to happen quite a lot, and the usage of Integer A/B doesn't help that. You should not make assumptions about what other code will be present in the map when you're writing the current code, you should write failsafe code that works properly.
 
Level 16
Joined
Aug 20, 2009
Messages
1,552
I feel guilty for using integer A, causing so much fuss n crap lol.

I don't have a connection from home, i will upload a fix tommorow.

Chill out guys !

@_@

Btw, the requester demands a huge change over the system, but im having problems, hope you guys
Can help me fix the next update!
 
Level 16
Joined
Aug 20, 2009
Messages
1,552
Last edited:
harsh friend, hope you can get things solved! =*(

I think its cool as it is, I don't particularly need it, but it is neat!

poor maggy--I think hes gonna have his head explode

I may not be a trigger master, but I always did notice strange bugs with integer loop A and B, sometimes they work and sometimes they bug, yet when you replace the integer with a custom variable, I sometimes found triggers that don't work with loop-A did work when you changed loop A to loop integer what ever. now i know why, fascinating.
 
Top