I'm guessing this means 1. no through-the-wall (including ceiling zipping) 2. no screenwrap ladder grabbing 3. no pausing to reset vulnerability... the rest of it doesn't cause route changes or obvious gameplay changes or is impossible without doing one of those I believe (like grabbing ladders early, that's almost unnoticable).
someone is out there who will like you. take off your mask so they can find you faster.
I support the new Nekketsu Kouha Kunio-kun.
Joined: 6/11/2006
Posts: 818
Location: Arboga, Sweden
Boco wrote:
Warp wrote:
Bisqwit wrote:
And theoretically, I'm working on a non-glitch Rockman TAS.
What do you classify as a glitch in Rockman?
I'm guessing this means 1. no through-the-wall (including ceiling zipping) 2. no screenwrap ladder grabbing 3. no pausing to reset vulnerability... the rest of it doesn't cause route changes or obvious gameplay changes or is impossible without doing one of those I believe (like grabbing ladders early, that's almost unnoticable).
Such a run would allow me to die with a happy soul.
Warp wrote:
omg lol this is so fake!!!1 the nes cant produce music like this!
Joined: 2/13/2007
Posts: 448
Location: Calgary, Alberta
Dear Bisqwit,
Is there a rank for people who dont post but publish a run? I mean along the terms of Silent Player.
What is your personal utopia and dystopia?
Renting this space for rent.
Trying to fix image on this site. Please cut slack.
As of April 6th, 2012:
After a long absence, here we go again?
And theoretically, I'm working on a non-glitch Rockman TAS.
What do you classify as a glitch in Rockman?
I'm guessing this means 1. no through-the-wall (including ceiling zipping) 2. no screenwrap ladder grabbing 3. no pausing to reset vulnerability... the rest of it doesn't cause route changes or obvious gameplay changes or is impossible without doing one of those I believe (like grabbing ladders early, that's almost unnoticable).
I think it would be a good idea to make a concrete list of tricks which cannot be used in the "no-glitch" version of the TAS, all of them with a rational basis, and if the movie is published, this list should be put in the movie description (alongside the reason why they are considered "glitches" not to be used in such run). Else it may feel a bit arbitrary why something is used and something else isn't.
Dear Bisqwit,
Do you think that the national football team of Finland will qualify for Euro 2008? Maybe a better question might be: Do you follow football or any other sport?
Is there a rank for people who dont post but publish a run? I mean along the terms of Silent Player.
There was.
Rridgway wrote:
What is your personal utopia and dystopia?
I suspected what Chamale said, so I will ignore this question.
Dacicus wrote:
Do you think that the national football team of Finland will qualify for Euro 2008? Maybe a better question might be: Do you follow football or any other sport?
i got three
1: how come your avatar is a different color every time i hit refresh? o_o
2: what codec do you recommend using for speedruns, and where can i get this codec? (i used to use xvid before it stopped working on my pc...)
3: if a speedrun is posted, and no other speedrun of that game is on the website, does it automatically get accepted?
D. Bq.:
1. Are mood-specific avatars limited to .png files? I looked through the avatar thread, but couldn't find an answer.
2. How many (if any) TASes do you host on the site, unbeknownst to the authors?
3. If you remember, did my very long location stretch the pages where I posted?
Apologies for more boring, creativity-lacking questions.
1. Are mood-specific avatars limited to .png files? I looked through the avatar thread, but couldn't find an answer.
2. How many (if any) TASes do you host on the site, unbeknownst to the authors?
3. If you remember, did my very long location stretch the pages where I posted?
1) They are only limited to what the browser can display (i.e. jpeg, gif, png), and the usual avatar restrictions described in the forum rules.
2) Unbeknownst is a word I have never used. It's like an union of "best" and "unknown". Re: TASes, hopefully zero, but I'm not sure if "yy" knows that his/her SMB1 movie is here, as I have no contact information whatsoever of that case. Similarly for Toxin's SMB3. Both are obsolete movies.
3) I don't.
Joined: 2/13/2007
Posts: 448
Location: Calgary, Alberta
Good man. And if Bisqwit does what I asked in my PM, the posts should move.
(lets try this again)
Dear Bisqwit,
When you were young, what did you want to be when you grew up?
Renting this space for rent.
Trying to fix image on this site. Please cut slack.
As of April 6th, 2012:
After a long absence, here we go again?
Joined: 3/9/2004
Posts: 4588
Location: In his lab studying psychology to find new ways to torture TASers and forumers
Bisqwit:
I have an std::vector<> and am traversing it via an iterator.
One of the common operations I can do with the iterator will push_back() onto the std::vector, if the iterator was one before the end, and another item was found.
push_back() will invalidate existing iterators if it had to perform a resize operation.
I am getting begin() and end() via wrapper functions.
Is there any way I can iterate through this properly, and have the iterators not invalidate when one of the operations in middle of the loop did a push_back()?
Warning: Opinions expressed by Nach or others in this post do not necessarily reflect the views, opinions, or position of Nach himself on the matter(s) being discussed therein.
I am getting begin() and end() via wrapper functions.
Is there any way I can iterate through this properly, and have the iterators not invalidate when one of the operations in middle of the loop did a push_back()?
If you need to be able to iterate it and extend it while iterating, use the numeric indexes instead. That, or when push_backing, convert the iterator into an index and back into an iterator:
for(it i = v.begin(); i != v.end(); ++i)
{
if(gruu(i)) // some random condition
{
typeof(v)::size_type s = i - v.begin(); // fixme: don't use typeof()
v.push_back(somevalue);
i = v.begin() + s;
}
}
I'm not sure whether end() is invalidated when the vector is resized, but since it is evaluated in each loop in this code, it doesn't matter.
I am not sure whether you can avoid the iterator invalidation by preallocating the vector using reserve(), so that capacity() before the loop yields a value larger or equal to the size() after the loop. You should check that, and if it's possible, then use reserve() to avoid multiple reallocations.
Joined: 3/9/2004
Posts: 4588
Location: In his lab studying psychology to find new ways to torture TASers and forumers
Bisqwit wrote:
If you need to be able to iterate it and extend it while iterating, use the numeric indexes instead. That, or when push_backing, convert the iterator into an index and back into an iterator:
for(it i = v.begin(); i != v.end(); ++i)
{
if(gruu(i)) // some random condition
{
typeof(v)::size_type s = i - v.begin(); // fixme: don't use typeof()
v.push_back(somevalue);
i = v.begin() + s;
}
}
I'm not sure whether end() is invalidated when the vector is resized, but since it is evaluated in each loop in this code, it doesn't matter.
I am not sure whether you can avoid the iterator invalidation by preallocating the vector using reserve(), so that capacity() before the loop yields a value larger or equal to the size() after the loop. You should check that, and if it's possible, then use reserve() to avoid multiple reallocations.
reserve() won't work if you don't know how much the last one may expand (meaning it keeps finding new items while working on the last one).
You gave me an idea how to fix this though. Each item in the vector contains its location in the vector, so after the push_back(), I can say:
i = v.begin() + i->item_pos;
Thanks.
Warning: Opinions expressed by Nach or others in this post do not necessarily reflect the views, opinions, or position of Nach himself on the matter(s) being discussed therein.
Is there any way I can iterate through this properly, and have the iterators not invalidate when one of the operations in middle of the loop did a push_back()?
Use std::deque instead. push_back() never invalidates iterators.
Is there any way I can iterate through this properly, and have the iterators not invalidate when one of the operations in middle of the loop did a push_back()?
Use std::deque instead. push_back() never invalidates iterators.
This effectively increases the container size by one and invalidates all iterators to the deque, but has no effect on the validity of references to elements of the deque.
I am curious how that reference-validity is maintained though. Because Deque is not the same as rope...
It's quite clear to me why pointers and references to a deque are not invalidated when items are added at the beginning or the end of the deque. I can also understand why adding elements at the beginning would invalidate iterators (because, if implemented in a certain way, existing iterators effectively will point to the element previous to the one they were originally pointing to). However, I do not understand why adding elements to the end of the deque would invalidate any iterators. My guess is that the standard doesn't guarantee it, but most implementations do it anyways (unless there's something I'm missing).
Well, I suppose that if you really want to make standard-conforming C++ code, you can't assume deque iterators stay valid after a push_back (even though references and pointers do). In that case you would have to use std::list instead, unless you explicitly need random access.
Joined: 3/9/2004
Posts: 4588
Location: In his lab studying psychology to find new ways to torture TASers and forumers
Bisqwit wrote:
Nach wrote:
so after the push_back(), I can say:
i = v.begin() + i ->item_pos;
No you cannot, because i (underlined) is undefined.
Ah good point.
But I can say size_t pos = i->item_pos; Then push back, then have i = v.begin()+pos;
Warning: Opinions expressed by Nach or others in this post do not necessarily reflect the views, opinions, or position of Nach himself on the matter(s) being discussed therein.
But I can say size_t pos = i->item_pos; Then push back, then have i = v.begin()+pos;
Yeah, but you could also say size_t pos = i - v.begin(); (as I explained earlier) and then it would no longer be depending on the details of whatever i points to, while not being a bit more complex.
Joined: 3/9/2004
Posts: 4588
Location: In his lab studying psychology to find new ways to torture TASers and forumers
However I'm not actually doing it with a vector as I said, I'm wrapping one, so it does depend on the implementation.
Although yes, you're right, I can get that info another way.
Warning: Opinions expressed by Nach or others in this post do not necessarily reflect the views, opinions, or position of Nach himself on the matter(s) being discussed therein.